[英]AngularJs - How to write testable controllers with private Methods
我正在嘗試使用angular.js +茉莉花來為我的一個控制器編寫測試。
假設我有一個控制器
angular.module('app').controller('MyCtrl', function() {
this.myFunc = function() {
// ...
};
activate();
function activate() {
this.myFunc();
}
});
該控制器具有一個稱為activate()的函數,該函數在創建控制器時被調用。
如何編寫對activate()函數的測試? (例如:在創建控制器時,應調用控制器函數“ myFunc()”)
我試圖寫這樣的東西:
describe('activate() controller', function() {
it('should call function myFunc', inject(function($rootScope, $controller) {
var locals = {$scope: $rootScope.$new()};
var controller = $controller('MyCtrl', locals);
spyOn(controller, 'myFunc').toHaveBeenCalled();
});
}
但是我得到了錯誤:
預期已調用間諜myFunc。
我認為在我創建間諜的那一刻,該控制器已經調用了Activate函數。
有沒有辦法測試這樣的控制器?
上面的代碼示例在初始化時執行myFunc方法。 因此,在您附加間諜時,它已被執行。 更好的測試方法是檢查myFunc執行了哪些轉換。
如果該方法是服務的一部分,則可以在注入中設置間諜程序,然后初始化控制器並期望已調用該服務方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.