Error: $injector:unpr AngularJS Testing mocking object instances

Error: $injector:unpr AngularJS Testing mocking object instances

我在测试我的 AngularJS 应用程序时一直 运行 遇到问题,我尝试注入所有依赖项,但它似乎不起作用,任何帮助都是非常感谢:)

这是一个相当大的应用程序,我正在尝试尽可能多地分解并测试它们,但是我们有一个名为 firebaseUser 的工厂,您可以猜到它是一个 firebaseUser。我们还有一个名为 userInstance 的实例,因此每当我尝试模拟 userInstance 时都会遇到错误。

describe('Dashboard Start Controller', function () {

  var scope, ctrl;

  beforeEach(function () {
    MockFirebase.override();
    module('noodleApp.start');
    module('noodleApp.noodleFactory');
    module('noodleApp.firebaseUser');
    module('noodleApp.start');
  });

  beforeEach(inject(function($rootScope, $controller, $injector) {
    scope = $rootScope.$new();
    ctrl = $controller('StartController', {$scope: scope});
  }));

  afterEach(function () {
    scope.$destroy();
  });

  it('should be available', function() {
    expect(ctrl).toBeDefined();
  });

  it('should init with filter being set to all', function() {
    expect(scope.filterOn).toBe('all');
  });
});

每当我 运行 这个测试时,我都会收到以下错误:Unknown provider: userInstanceProvider <- userInstance <- StartController

$controller 是对 $inject 的调用,但被视为服务。发生的情况是您正在实例化控制器,但是因为使用了 $inject,并且您没有传递 userInstance,它会查找未找到的提供程序。您需要确保将 service/factory/resolve 传递给您的 $controller 方法。通过模拟它并将其传递给控制器​​,您可以隔离您期望发生的事情,并在此单元测试中仅测试控制器。

beforeEach(inject(function($rootScope, $controller) {
    scope = $rootScope.$new();
    userInstanceMock = {
        // mock out all methods here
        foo: sinon.stub()
    }
    ctrl = $controller('StartController', {
        $scope: scope,
        userInstace: userInstaceMock
    });
}));