我正在尝试使用angular.js + jasmine为我的一个控制器编写测试。
我们说我有一个控制器
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。
我认为在创建我的间谍时,控制器已经调用了激活功能。
有没有办法测试这样的控制器?
答案 0 :(得分:1)
上面的代码示例在初始化时执行myFunc方法。因此,当您附加间谍时,它已经被执行。更好的测试方法是检查myFunc执行的转换。
如果该方法是服务的一部分,您可以在注入中设置您的间谍,然后初始化控制器并期望调用服务方法。