Ich habe versucht, das Format der ng-directive-testing Repo für eine Richtlinie, die ich geschrieben habe. Die Anweisung rendert grundsätzlich eine Überlagerung, wenn der Benutzer auf ein Element klickt. Hier ist die Richtlinie (vereinfacht):Wie kann ich ein Click-Ereignis in meinem AngularJS-Direktive-Test simulieren?
mod.directive('uiCopyLinkDialog', function(){
return {
restrict: 'A',
link: function(scope, element, attrs) {
var $elm = angular.element(element);
element.bind('click', function(event) {
$elm.addClass('test');
});
}
};
});
Der Test Ich schreibe wie folgt aussieht:
describe('pre-compiled link', function() {
beforeEach(mocks.inject(function($compile, $rootScope) {
scope = $rootScope;
element = angular.element('<span class="foo" ui-copy-link-dialog="url"></span>');
$compile(element)(scope);
scope.$digest();
}));
it("should change the class when clicked", function() {
element.click(); // this returns "'undefined' is not a function"
element[0].click(); // so does this
$(elm).click(); // this uses jquery and doesn't *seem* to fail
waits(500); // hack to see if it was a race condition
expect(elm.className).toContain('test'); // always fails
});
});
Sie können in dem Test sehen, dass ich mehr Möglichkeiten versuchen, das click()
Ereignis auf dem Link zu triggern , wobei die meisten einen undefined
Fehler geben.
Kann mir jemand sagen, was ich hier falsch mache? Wenn ich die Beispiele lese, klingt das nach korrekter Syntax, aber mein Testläufer (Karma via Grunt) möchte nicht Ball spielen.
Möglicherweise möchten Sie versuchen, eine ID zu geben, und wählen Sie auf der Id basiert: angular.element ('Spanne [id = "theSpan"] '). click(); Zusätzlich, da ich sehe, dass Sie den Dialog erwähnen ... ist Ihr Overlay ein jQuery-Dialog?wenn ja; Sie werden daran gehindert, ein Klick-Ereignis auf etwas außerhalb dieses Dialogs auszulösen, während das Dialogfeld geöffnet wird. Eine Lösung besteht darin, nach dem Schließen des Dialogfelds ein Ereignis auszulösen und anschließend ein Klickereignis auszuführen. –
Danke: Es sieht so aus, als wäre das ein Fehler beim Ausführen dieser Tests in PhantomJS - wenn ich Tests in Chrome starte, werden die 'click()' Ereignisse korrekt ausgelöst. Seltsam! –