AngularJS:如何创造"单元测试中的控制器,以及未定义范围的原因?

时间:2014-04-05 01:28:05

标签: angularjs unit-testing

我公司创建的应用程序无处不在,我们使用了如何创建控制器的示例:

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的新手和前端的单元测试,我做错了什么?

1 个答案:

答案 0 :(得分:3)

根据我的理解,第二种语法(app.controller(...))在模块上注册控制器功能。第一种语法只是将控制器函数添加为模块的属性。 app.controller在引擎盖下做了一些魔术,因此当您在测试中调用$controller('myFunnyController, ...)时,模块会知道控制器并可以运行它。这是根据angular controllers guide定义控制器的推荐方法。