如果我正在测试组件,我知道如何使用注入到组件中的模拟服务。但如果我正在测试注入子服务的服务,我只需要
const testedService = new Service(mockSubService);
有没有办法使用 ng-mocks 来获取 SubService 的模拟,理想情况下所有 MockInstance 都有效?
我尝试过类似这样的各种代码变体:
MockInstance(SubService, 'someProperty', () => 10, 'get');
MockBuilder().mock(SubService);
const mockSubService = TestBed.inject(SubService);
或者这个:
MockBuilder().mock(SubService, {someProperty: 10});
const mockSubService = TestBed.inject(SubService);
但在这两种情况下,“someProperty”都没有被模拟 - 实际的 SubService 实现由 TestBed 返回。
我有一种感觉,我错过了一些关于 ng-mocks 的非常简单的东西,但在线帮助有点令人困惑。我也知道 MockService,但显然它不应该在像我这样的情况下使用,而且它也不会设置间谍。
MockService
和 MockProvider
。
ng-mocks
有关如何测试具有依赖项的提供程序的文档中。
beforeEach(() =>
MockBuilder(Service, ServiceModule)
// Service2 is provided / imported in ServiceModule
.mock(Service2, {
trigger: () => 'mock2',
})
// Service3 will be provided in TestBed
.provide(MockProvider(Service3, {
trigger: () => 'mock3',
})
);
如果您需要间谍,可以使用jasmine.createSpy().and.returnValue('mock2')
代替
() => 'mock2'
。