Mam następującą dyrektywę AngularJS, która tworzy element input
. Wejście ma atrybut ng-change
, który uruchamia funkcję doIt()
. W jednostce testowej mojej dyrektywy chcę sprawdzić, czy funkcja doIt
jest wywoływana, gdy użytkownicy zmieniają dane wejściowe. Ale test nie przechodzi. Chociaż działa w przeglądarce podczas testowania ręcznego.Jak wywołać zmianę Ng w teście dyrektywy w AngularJS
dyrektywa:
...
template: "<input ng-model='myModel' ng-change='doIt()' type='text'>"
Test:
el.find('input').trigger('change') // Dos not trigger ng-change
żywo demo (ng-change): http://plnkr.co/edit/0yaUP6IQk7EIneRmphbW?p=preview
Teraz, test przechodzi jeżeli ręcznie powiązać change
imprezę zamiast użycia atrybutu ng-change
.
template: "<input ng-model='myModel' type='text'>",
link: function(scope, element, attrs) {
element.bind('change', function(event) {
scope.doIt();
});
}
żywo demo (wiązanie ręczne): http://plnkr.co/edit/dizuRaTFn4Ay1t41jL1K?p=preview
Czy istnieje sposób na wykorzystanie ng-change
i uczynić go testować? Dziękuję Ci.
Zmienna ng jest wyzwalana przy zmianach modelu, a nie zdarzeń. dlaczego nie przetestować kodu kontrolera dla twojego "doIt" fn? – marko
@marko, dzięki za dobre pytanie. Wszystko, co chcę zrobić w teście dyrektywy, to sprawdzenie, czy nie jest wywoływana, gdy użytkownik zmienia dane wejściowe. sam będzie wyśmiewany w teście dyrektywy, ponieważ jest już testowany w teście kontrolera, jak sugerujesz. – Evgenii