Angular JS:错误:[$ injector:unpr]未知提供者:$ scopeProvider

时间:2015-11-19 18:29:22

标签: javascript angularjs unit-testing

我正在尝试为我的应用编写一些单元测试,但我遇到了一个问题,我收到了这个错误:

  

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

我对一般的单元测试非常陌生,所以对此有任何帮助都会受到赞赏。提前谢谢!

提前致谢!

1 个答案:

答案 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进行单元测试时需要手动提供。