Angular ディレクティブのテストをいくつか書いていますが、入力フィールドへのユーザー入力をシミュレートする必要があります。私はこれをやろうとしました:
element.find('input').val('some value').trigger('input');
しかし、うまくいきませんでした。トリガーchange
も機能しませんでした。エレメント スコープに直接アクセスしてelement.scope()
変更できることはわかっていますが、入力の値を変更して Angular にデータ バインディングを行わせる方が自然なようです。
それだけの価値があるためinput(name).enter(value)
、Angular ngScenario からチェックアウトしましたが、私と同じように動作するようです:
...
input.val(value);
input.trigger(event || (supportInputEvent ? 'input' : 'change'));
...
私は何が欠けていますか?この場合、ユーザー入力をテストするより良い方法はありますか?
(質問を説明するためにjsFiddlerスクリプトを作成しました)
アップデート
明確化が必要だと思います。私は DOM や Angular 領域自体の外側のスコープを変更しようとしているわけではありません。ディレクティブのスコープのプロパティにバインドされた入力ボックスをレンダリングするディレクティブがあります。ディレクティブが想定どおりに動作することを確認する自動テストを作成しています。1 つのテストで行うべきことは、入力をシミュレートして、ディレクティブ スコープが更新され、その入力に対して何らかの動作が実行されることをアサートできるようにすることです。前述したように、 を使用してテスト コードからディレクティブのスコープを変更できますがelement.scope()
、入力の値を変更して Angular に任せたいと思います。