我用茉莉,业力来测试angularjs控制器......测试样本看起来像这样:
beforeEach(inject(function(_$rootScope_, _$controller_){
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
$controller = _$controller_;
$controller('AboutController', {'$rootScope' : $rootScope, '$scope': $scope});
}));
在这里,我很困惑茉莉花是如何了解注射功能的?它是与angular的Injector.inject()相同的函数对象......我很惊讶,该方法在Angular命名空间之外可用...以及注入函数的 $ controller 变量是做什么的? / p>
答案 0 :(得分:2)
inject
函数是Angular Mocks package (ngMock)的一部分。您可能已将此添加到karma.conf.js文件中以便配置jasmine测试。因此,这种注入方式在生产Angular代码中是 not ,它仅用于单元测试。
该包将inject
添加到窗口对象(全局),以方便测试。
来自文档:
注意:此功能也会在窗口上发布,以便于访问。
了解更多信息here is the documentation。
关于第二个问题:$controller
服务允许您初始化命名控制器(在您的示例中为'AboutController'
)并传入它的依赖项。在测试控制器时,通常需要掌握$scope
。