ng-mocks - 如何在组件测试床上下文之外创建服务的模拟?

问题描述 投票:0回答:1

如果我正在测试组件,我知道如何使用注入到组件中的模拟服务。但如果我正在测试注入子服务的服务,我只需要

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,但显然它不应该在像我这样的情况下使用,而且它也不会设置间谍。

service ng-mocks
1个回答
0
投票

听起来您需要

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'

© www.soinside.com 2019 - 2024. All rights reserved.