Comment puis-je vérifier si mon élément a été concentrée dans un test unitaire
J'ai la directive suivante à l'autofocus d'un champ:
.directive('ngAutofocus', function ($timeout) {
return {
restrict: 'A',
link: function (scope, elm) {
$timeout(function () {
elm[0].focus();
});
}
};
}
Comment aurais-je de l'unité de tester cela? J'ai essayé plusieurs choses comme le sélecteur suivant, mais qu'ils reviennent tous des erreurs ou faux:
console.log($(elm[0]).is(':focus'));
Mon unité de test est mis en place comme ceci:
elm = angular.element('<input type="text" name="textfield1" ng-autofocus>');
$scope.$digest();
$compile(elm)($scope);
- En plus des remarques que vous faites dans votre réponse, le lecteur doit prendre note que votre directive définition devrait lire:
.directive('ngAutofocus', '$timeout', function ($timeout) {
-- sinon$timeout
n'est pas transcluded par Angulaire. - Êtes-vous sûr? Tu veux sans doute dire avec un [ ajouté trop, et pas parce que transclusion, mais en raison de minification provoquant l'injection de pause sans certaines minimizers. Voir github.com/johnpapa/...
- oui pour le
[
- je modifier à l'extérieur de la zone de commentaire. - alors encore, l'injection d'aider n'est nécessaire que dans certains cas, et n'est pas requise pour la question
Vous devez vous connecter pour publier un commentaire.
J'ai pensé à elle, et c'était assez évident en fait;
Mon problème était double:
Vous pouvez utiliser
document.activeElement
pour vérifier la mise au point. Le seul inconvénient étant que le code HTML doit être ajouté dans le corps du document pour que cela fonctionne.https://developer.mozilla.org/en-US/docs/Web/API/Document/activeElement
Plus détaillé de la solution ci-dessous, ce qui permet de tester (l'espionnage) qui s'exécute immédiatement (c'est à dire pas de
$timeout
ou tout autre événement). La clé est d'abord de rendre unDOM element
avant$compile
pistes:Avec un
directive
etlink
fonction qui pourrait ressembler à:Vous devez utiliser l'angulaire.élément à l'api de jQuery lite - et d'utiliser la méthode triggerHandler().
http://docs.angularjs.org/api/ng/function/angular.element
http://api.jquery.com/triggerhandler/
Zone potentielle pour certains tests de focus de la connaissance:
https://shanetomlinson.com/2014/test-element-focus-javascript
Également vous concernant votre test unitaire - vous n'avez pas besoin d'ajouter l'élément de l'organisme, il est possible de tester sans.