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
});
}));
我在测试我的 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
});
}));