AngularJS ディレクティブでフォーカスをテストするにはどうすればよいですか? 以下が機能することを期待します。
describe('focus test', function(){
it('should focus element', function(){
var element = $('<input type="text" />');
// Append to body because otherwise it can't be foccused
element.appendTo(document.body);
element.focus();
expect(element.is(':focus')).toBe(true);
});
});
ただし、これは IE でのみ機能し、Firefox と Chrome では失敗します。
更新: @S McCrohan によるソリューションが機能します。これを使用して、「toHaveFocus」マッチャーを作成しました。
beforeEach(function(){
this.addMatchers({
toHaveFocus: function(){
this.message = function(){
return 'Expected \'' + angular.mock.dump(this.actual) + '\' to have focus';
};
return document.activeElement === this.actual[0];
}
});
});
次のように使用されます。
expect(myElement).toHaveFocus();
フォーカス関連のテストでは、コンパイルされた要素を DOM にアタッチする必要があることに注意してください。これは次のように実行できます。
myElement.appendTo(document.body);