我公司创建的应用程序无处不在,我们使用了如何创建控制器的示例:
app.myFunnyController = function($scope.....){}
但是我看到测试人员中的每个地方都在使用这种创建控制器的方式:
app.controller('myFunnyController', function ($scope) {
}
我可以看到,当我创建我的测试并使用app.myFunnyController声明时:
'use strict';
describe('publicCtrl', function(){
beforeEach(module('app'));
it("should be true", inject(function($controller){
var scope = {},
ctrl = $controller('myFunnyController', {$scope : scope});
expect(scope.data).toBe("test2");
}));
})
我收到myFunnyController的错误不是函数。如果我使用第二种类型的声明,一切正常。为什么会这样?
另一个问题是我收到错误:未定义范围。 我是Karma的新手和前端的单元测试,我做错了什么?
答案 0 :(得分:3)
根据我的理解,第二种语法(app.controller(...)
)在模块上注册控制器功能。第一种语法只是将控制器函数添加为模块的属性。 app.controller
在引擎盖下做了一些魔术,因此当您在测试中调用$controller('myFunnyController, ...)
时,模块会知道控制器并可以运行它。这是根据angular controllers guide定义控制器的推荐方法。