auslösen Ich habe die folgende AngularJS Direktive, die ein input
Element erstellt. Eingabe hat ng-change
Attribut, das doIt()
Funktion ausgeführt wird. Im Einheitentest meiner Anweisung möchte ich prüfen, ob die Funktion doIt
aufgerufen wird, wenn Benutzer die Eingabe ändert. Aber der Test besteht nicht. Obwohl es im Browser beim manuellen Testen funktioniert.Wie man ng-change in Directional Test in AngularJS
Richtlinie:
...
template: "<input ng-model='myModel' ng-change='doIt()' type='text'>"
Test:
el.find('input').trigger('change') // Dos not trigger ng-change
Live-Demo (ng-change): http://plnkr.co/edit/0yaUP6IQk7EIneRmphbW?p=preview
Nun hat der Test bestanden, wenn ich manuell change
Ereignis statt binden Verwendung von ng-change
Attribut.
template: "<input ng-model='myModel' type='text'>",
link: function(scope, element, attrs) {
element.bind('change', function(event) {
scope.doIt();
});
}
Live-Demo (manuelle Bindung): http://plnkr.co/edit/dizuRaTFn4Ay1t41jL1K?p=preview
Gibt es eine Möglichkeit ng-change
zu nutzen und prüfbar machen? Vielen Dank.
ng-change wird bei Modelländerungen ausgelöst, nicht bei Ereignissen. Warum nicht einfach den Controller-Code für Ihr "DoIt" Fn testen? – marko
@marko, danke für die gute Frage. Alles, was ich im Direktiven-Test tun will, ist zu überprüfen, dass doIt aufgerufen wird, wenn Benutzer die Eingabe ändert. doIt selbst wird im Direktiven-Test verspottet, weil es bereits im Controller-Test getestet wurde, wie Sie vorgeschlagen haben. – Evgenii