2013-12-09 10 views
5

Widziałem, że w celu symulowania działania użytkownika na DOM generowanego przez dyrektywy, istnieją dwa podejścia, zarówno trigering zdarzenie:angularjs: wyzwalanie imprezę, aby symulować działania użytkownika podczas testów jednostkowych dyrektywę

How to trigger ng-change in directive test in AngularJS

pierwsze podejście wykorzystuje jquery a druga funkcja o nazwie browserTrigger zdefiniowano w skośnych scenario.js. Druga powinna być lepsza, ponieważ jquery miałoby błąd w wyzwalaniu zdarzeń (co, jak sądzę, nie kłócę się :)).

Korzystanie ze scenariusza kątowego oznacza dla mnie test e2e. ale widziałem egghead video i wydaje się, że wykonuje testy jednostkowe. Jak to jest możliwe ?

Sądzę, że właśnie skopiował funkcję?

Myślę, że zamierzam przetestować dyrektywy jako testy e2e, to ma więcej sensu, ponieważ test jednostkowy jest bardziej czysty.


Cóż, ja po prostu okazało się, że jest coś browserTrigger wewnętrzny nie powinien być stosowany bezpośrednio: https://github.com/angular/angular.js/issues/5178


Dzięki!

+0

próbowałem aby użyć 'ngScenario' wcześniej, aby przetestować dyrektywę i uznał, że jest trudniejsze w użyciu niż ręczne wyzwalanie zdarzeń. Być może nie próbowałem wystarczająco mocno. W każdym razie mam testy z jQuery. Możesz je sprawdzić [tutaj] (https://github.com/mbenford/ngTagsInput/blob/master/test/tags-input.spec.js). Mam nadzieję, że mogą ci się przydać. –

+0

możliwy duplikat dyrektywy [Unit test kątowe kliknięcie prawym przyciskiem myszy] (http://stackoverflow.com/questions/17720009/unit-test-angular-right-click-directive) –

Odpowiedz

9

Począwszy od 1.3.15 można użyć triggerHandler wyzwolić zdarzenie, jak pokazano poniżej,

it('should click the element',function(){ 
    element.triggerHandler('click') ; 
    expect($scope.clicked).toBe(true); 
}); 
+1

Jest również wyświetlany na tej samej stronie dla starszych wersje –

+0

Czy można symulować wywołanie $ scope.function()? – Nimo

+0

Mam na myśli coś w rodzaju '

'? Z jakiegoś powodu nie jestem w stanie przetestować tego rodzaju zachowania ... – Nimo

1

prosty i działa, przykład, w jednostce testowej env:

spyOn(self, 'updateTransactionPrice'); 


var el = compile('<form name="form" latest novalidate json-schema="main.schema_discount" json-schema-model="main._data"><input type="text" ng-model="main._data.reverse_discount" ng-class="{ \'form-invalid\': form.reverse_discount.$invalid }" ng-change="main.transactionPrice(form);" name="reverse_discount" class="form-control-basic" placeholder="" ng-disabled="!main.selectedProduct.total_price"></form>')(scope); 
el.find('input').triggerHandler('change'); 

expect(self.updateTransactionPrice).toHaveBeenCalled(); 
Powiązane problemy