私はいくつかのテストに合格するためにember addonを取得しようとしています。Em.run.next を使用して、実行ループで後で実行されるコードを追加するまで、昨日まで問題なく動作していました。
これが私のテストで行っていることです。
visit('/').then(function() {
find('bm-select').click();
andThen(function() {
equal(1,1, 'yay');
});
});
問題は、クリックがトリガーされたとき、後の関数が の後に実行されることandThen
です。その時までに、すべてのテストが完了し、エラーがスローされます。私は印象を受けており、すべての非同期処理が完了するまで待つ必要があります。
これは、クリックがトリガーされたときに私のコードがどのように見えるかです(クリック時に focusOut イベントがトリガーされます)
lostFocus: function() {
if(this.get('isOpen')) {
Em.run.later(this, function() {
var focussedElement = document.activeElement;
var isFocussedOut =
this.$().has(focussedElement).length === 0 && !this.$().is(focussedElement);
if(isFocussedOut) {
this.closeOptions({focus:false});
}
}, 0);
}
}.on('focusOut'),
エラーが発生することがわかりますUncaught TypeError: Cannot read property 'has' of undefined
。これは focusOut メソッドからのものです。関数がコンポーネントを実行するまでに、_state は「破棄中」であり、this.$()
未定義を返します。
ヘルパーを試してみましたがwait
、まだテストを機能させることができません。これは通常どのように行われますか。ビンで実行するテストを抽出しました。ここにリンクがあります。