Test pour focus une directive AngularJS
Comment Pouvez-vous tester la mise au point dans une directive AngularJS? Je m'attendrais à ce que ce qui suit fonctionne:
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);
});
});
Cependant, cela ne fonctionne que dans IE, il échoue dans Firefox et Chrome
Mise à jour: La solution par @ S McCrohan fonctionne. En utilisant cela, j'ai créé un matcher' 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];
}
});
});
Qui est utilisé comme suit:
expect(myElement).toHaveFocus();
Notez que pour les tests liés au focus, l'élément compilé doit être attaché au DOM, ce qui peut être fait comme ceci:
myElement.appendTo(document.body);
22
demandé sur
Mark Lagendijk
2013-09-17 16:44:01
2 réponses
Essayez 'document.activeElement'
au lieu de ':focus'
. Je ne l'ai pas testé dans karma, mais $('document.activeElement')
se comporte comme souhaité sous jQuery standard.
10
répondu
S McCrohan
2013-12-17 23:58:31
Dans Jasmine 2, Voici maintenant:
beforeEach(function() {
jasmine.addMatchers({
toHaveFocus: function() {
return {
compare: function(actual) {
return {
pass: document.activeElement === actual[0]
};
}
};
}
});
});
7
répondu
Christian Iacullo
2014-04-17 03:50:29