Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:如何;创建;控制器在单元测试中,为什么没有定义范围?_Angularjs_Unit Testing - Fatal编程技术网

AngularJS:如何;创建;控制器在单元测试中,为什么没有定义范围?

AngularJS:如何;创建;控制器在单元测试中,为什么没有定义范围?,angularjs,unit-testing,Angularjs,Unit Testing,在我公司创建的应用程序中,我们使用了以下示例来说明如何创建控制器: app.myFunnyController = function($scope.....){} 但我看到,在测试中,到处都有人在使用这种方法创建控制器: app.controller('myFunnyController', function ($scope) { } 我可以看到,当我创建测试并使用app.myFunnyController声明时: 'use strict'; describe('publicCtrl', f

在我公司创建的应用程序中,我们使用了以下示例来说明如何创建控制器:

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错误不是一个函数。如果我使用第二种类型的声明,一切正常。为什么会这样

另一个问题是我遇到了一个错误:未定义范围。
我不熟悉前端的业力和单元测试,我做错了什么

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

请在单独的问题中进一步说明您的第二个问题。我看不出任何不应该定义范围的明显原因,因此我们可能需要更多信息。