【发布时间】:2015-07-16 18:26:54
【问题描述】:
我正在尝试使用 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 已被调用。
我认为在我创建间谍时,控制器已经调用了激活函数。
有没有办法像这样测试控制器?
【问题讨论】:
-
你在每次测试前加载模块吗?
-
我认为唯一可以测试的方法是 myFunc 是否正在以某种可以确认的方式改变控制器的状态
-
是的,我认为@Chandermani 是正确的。在调用
$controller之前 必须在controller引用上spy。然后间谍将能够记录其构造函数中发生的事情。 -
是的,我加载了模块。 @DavinTryon 你能发布一个代码示例吗?
-
什么代码示例?
标签: javascript angularjs unit-testing testing jasmine