我在测试我的 AngularJS 应用程序时一直遇到问题,我尝试注入(inject)所有依赖项,但它似乎不起作用,非常感谢任何帮助:)
这是一个相当大的应用程序,我正在尝试尽可能多地分解并测试它们,但是我们有一个名为 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
的调用,但被视为服务。发生的情况是您正在实例化 Controller ,但由于使用了 $inject
,并且您没有传递 userInstance
,它会查找未找到的提供程序。您需要确保将 service/factory/resolve 传递给您的 $controller
方法。通过模拟它并将其传递给 Controller ,您可以隔离预期发生的情况,并在此单元测试中仅测试 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 - 错误 : $injector:unpr AngularJS Testing mocking object instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33739514/