我正在尝试为我的应用编写一些单元测试,但我遇到了一个问题,我收到了这个错误:
Chrome 46.0.2490(Mac OS X 10.10.5)app.customer"在每个"之前应该成功创建#34;"失败 错误:[$ injector:unpr]未知提供者:$ scopeProvider< - $ scope< - 客户
我的test.js
文件如下所示:
describe('app.customers', function() {
var controller;
beforeEach(function() {
module('app', function($provide) {});
specHelper.injector(function($controller, $q, $rootScope, DataService) {});
});
beforeEach(function() {
sinon.stub(DataService, 'getCustomers', function() {
var deferred = $q.defer();
deferred.resolve(mockData.getMockCustomers());
return deferred.promise;
});
controller = $controller('Customer');
$rootScope.$apply();
});
describe('Customer Controller', function() {
it('should be created successfully', function() {
expect(controller).to.be.defined;
});
});
specHelper.verifyNoOutstandingHttpRequests();
});
我不确定为什么它正在寻找$scopeProvider
,因为我在测试中没有引用$scope.provider
。
我对一般的单元测试非常陌生,所以对此有任何帮助都会受到赞赏。提前谢谢!
提前致谢!
答案 0 :(得分:0)
您必须使用本地范围初始化控制器。
beforeEach(function() {
sinon.stub(DataService, 'getCustomers', function() {
var deferred = $q.defer();
deferred.resolve(mockData.getMockCustomers());
return deferred.promise;
});
// inject local scope into controller
controller = $controller('Customer', {$scope: $rootScope});
$rootScope.$apply();
});
我的猜测是你的客户控制器需要$ scope,但没有提供它。这是在应用程序中运行时自动完成的,但是在通过$ controller进行单元测试时需要手动提供。