問題を示すために、この簡単なデモ コンポーネントを作成しました。コンポーネントコードは以下です
App.FocusOutComponent = Em.Component.extend({
attributeBindings: ['tabindex'],
tagName: 'focus-out',
setFocus: function() {
console.log('clicked focus-out container');
this.$().find('button').focus();
console.log('focus set to button');
}.on('click'),
focussedOut: function() {
console.log('focussedOut from outer container');
}.on('focusOut'),
});
{{#focus-out id="focus-container" tabindex="-1"}}
<button id="text-button">Test Button</button>
{{/focus-out}}
これを実行してfocus-out
要素をクリックすると、これがログの順序になります。デモへのリンク
- クリックされたフォーカス アウト コンテナー
- 外部コンテナーからの focusdOut
- フォーカスをボタンに設定
次のコードを使用して、これに対する受け入れテストを作成しようとしています。
test('test visit / and click button', function() {
expect(0);
visit('/').then(function() {
find('focus-out').click();
console.log('after click in test');
});
});
ログの順序が異なります。デモへのリンク。
- クリックされたフォーカス アウト コンテナー
- フォーカスをボタンに設定
- クリック後テスト
- 外部コンテナーからの focusdOut
focusOut
ログは、クリック後のログの前ではなく、最後に印刷されました。最後に追加のログ(クリック後)だけで、ログの順序が同じになると予想していました。
これがバグなのか、私のコードに問題があるのか わかりません。
また、テストの実行中に別の問題に気付きました。テストの実行中に chrome dev-tools に注目すると、focusOut
イベントはまったくトリガーされません。
これに関するいくつかの助けは大歓迎です。