我正在测试服务A,但是服务A取决于服务B(即服务B已注入服务A)。
我已经看到了这个问题,但是我的情况有所不同,因为我认为_模拟_ 服务B而不是注入服务B的实际实例更有意义。我将用茉莉间谍对其进行模拟。
这是一个示例测试:
describe("Sample Test Suite", function() { beforeEach(function() { module('moduleThatContainsServiceA'); inject([ 'serviceA', function(service) { this.service = service; } ]); }); it('can create an instance of the service', function() { expect(this.service).toBeDefined(); }); });
我得到的错误是:
错误:未知提供程序:serviceBProvider
我该怎么做?
实际上,在AngularJS中,依赖注入使用“最后获胜”规则。因此,您可以在包含模块和依赖项之后在测试中定义服务,然后当您要测试的服务A将使用DI请求服务B时,AngularJS将提供服务B的模拟版本。
通常,这是通过定义新模块(例如MyAppMocks),在其中放置模拟服务/值然后仅将该模块添加为依赖项来完成的。
(示意上)的种类:
beforeEach(function() { angular.module('MyAppMocks',[]).service('B', ...)); angular.module('Test',['MyApp','MyAppMocks']); ...