我有以下創建input
元素的AngularJS指令。輸入具有運行doIt()
函數的ng-change
屬性。在我的指令的單元測試中,我想檢查當用戶改變輸入時是否調用doIt
函數。但是測試沒有通過。儘管它在手動測試時可用於瀏覽器。如何在AngularJS中觸發指令測試中的ng-change
指令:
...
template: "<input ng-model='myModel' ng-change='doIt()' type='text'>"
測試:
el.find('input').trigger('change') // Dos not trigger ng-change
現場演示(NG-變化):http://plnkr.co/edit/0yaUP6IQk7EIneRmphbW?p=preview
現在,測試通過,如果我手動綁定change
事件,而不是使用ng-change
屬性。
template: "<input ng-model='myModel' type='text'>",
link: function(scope, element, attrs) {
element.bind('change', function(event) {
scope.doIt();
});
}
現場演示(手動綁定):http://plnkr.co/edit/dizuRaTFn4Ay1t41jL1K?p=preview
是否有使用ng-change
並使其可測試的方法嗎?謝謝。
在模型變化時觸發ng變化,而不是事件。爲什麼不只是測試你的「doIt」fn的控制器代碼? – marko
@marko,謝謝你的好問題。我想在指令的測試中做的是檢查doIt在用戶改變輸入時被調用。 doIt本身會在指令的測試中被嘲弄,因爲它已經在控制器的測試中進行了測試,正如您所建議的那樣。 – Evgenii