我在控制器上定义了一个方法,我正在尝试测试它是否已被调用。我能够测试该方法是否被定义,但是当我尝试测试它是否被调用时,它会抱怨它希望调用间谍。
这是我的控制器:
myControllers.controller 'MyCtrl', ($scope) ->
this.init = () -> doStuff()
this.init()
这是我的测试套件:
describe "testing myCtrl", () ->
beforeEach "myControllers"
$controller = {}
$scope = {}
beforeEach inject (_$controller_,$rootScope) ->
$controller = _$controller_
$scope = $rootScope.$new()
describe "MyCtrl", () ->
beforeEach () ->
MyCtrl=$controller('MyCtrl',{$scope:$scope})
it "should be defined", () -> # passes
expect(MyCtrl).toBeDefined()
it "should define #init", () -> # passes
expect(angular.isFunction(MyCtrl.init)).toBe true
it "should call #init", () -> # fails
spyOn MyCtrl, 'init'
expect(MyCtrl.init).toHaveBeenCalled()
最后一个断言导致错误:调用了预期的spy init。
答案 0 :(得分:0)
这是因为它立即被调用,所以当你的测试命中时,它已经运行了。您创建MyCtrl的beforeEach是自动调用的地方。你必须采用不同的方式来构建测试。
答案 1 :(得分:0)
我相信问题的答案是我的控制器中没有init()函数。没有理由。控制器中的顶级代码在实例化时运行,将其包装在init函数中是多余的。