Comment déclencher un événement de clic dans un test unitaire pour une directive angulaire
-
21-12-2019 - |
Question
J'ai une application Angular (exécutée à partir d'un projet ASP.NET MVC.)
Dans cette application, j'ai une directive avec la fonction de lien suivante :
link: function (scope, element, attrs, formCtrl) {
element.bind('click', function (event) {
formCtrl.$setPristine();
});
}
J'ai écrit ce test :
var $compile,
$rootScope,
form;
beforeEach(module('points'));
beforeEach(inject(function(_$compile_, _$rootScope_, testHelper){
$compile = _$compile_;
$rootScope = _$rootScope_;
testHelper.expectBaseRoute();
}));
it('Should set form to pristine when clicked', function () {
var scope = $rootScope;
form = $compile('<form name="testForm" unsaved-warning-clear><input name="test" ng-model="value"/></form>')(scope);
scope.value = "abc";
scope.$digest();
scope.testForm.test.$setViewValue('def');
expect(scope.testForm.$pristine).toBe(false);
$(form).trigger('click');
expect(scope.testForm.$pristine).toBe(true);
});
Si je l'exécute dans le navigateur en utilisant Jasmine, le test réussit.
Si je le lance avec chutzpah
à l’intérieur de l’idée, cela échoue.Il ne déclenche jamais le click
événement.
Y a-t-il quelque chose qui me manque ?
La solution
Dans mon cas, il s’agissait d’une erreur stupide de l’utilisateur.
Mon fichier de lanceur de test Jasmine exécuté à partir du navigateur avait jquery, puis angulairement référencé.
Mon fichier chutzpah.json avait l'ordre inverse.
J'ai déplacé la référence jquery et elle a commencé à fonctionner.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow