我正在尝试使用 angular.js + jasmine 为我的一个 Controller 编写测试。
假设我有一个 Controller
angular.module('app').controller('MyCtrl', function() {
this.myFunc = function() {
// ...
};
activate();
function activate() {
this.myFunc();
}
});
这个 Controller 有一个名为 activate() 的函数,在创建 Controller 时调用。
如何为 activate() 函数编写测试? (像这样:创建 Controller 时,应该调用 Controller 函数“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();
});
}
但是我得到了错误:
Expected spy myFunc to have been called.
我想在我创建 spy 时, Controller 已经调用了激活函数。
有没有办法像这样测试 Controller ?
最佳答案
上面的代码示例在初始化时执行 myFunc 方法。因此,当你附加 spy 时,它已经被处决了。更好的测试方法是检查 myFunc 执行了哪些转换。
如果该方法是服务的一部分,您可以在注入(inject)中设置 spy ,然后初始化 Controller 并期望调用服务方法。
关于javascript - AngularJs - 如何使用私有(private)方法编写可测试的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079766/