Ответ 1
Попробуйте 'document.activeElement'
вместо ':focus'
. Я не тестировал его в карме, но $('document.activeElement')
ведет себя по желанию в стандартном jQuery.
Как вы можете проверить фокус в директиве 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);
Попробуйте 'document.activeElement'
вместо ':focus'
. Я не тестировал его в карме, но $('document.activeElement')
ведет себя по желанию в стандартном jQuery.
В Жасмине 2 это теперь:
beforeEach(function() {
jasmine.addMatchers({
toHaveFocus: function() {
return {
compare: function(actual) {
return {
pass: document.activeElement === actual[0]
};
}
};
}
});
});