假设我想为一个服务编写一个单元测试,该测试取决于另一个模块的服务。
现在这是我的问题。有什么方法可以编写测试,以便模拟MyService
所依赖的模块,以便可以像这样在单元测试中使用它:
const moduleRef = await Test.createTestingModule({
imports: [
MockedModule,
],
providers: [
MyService,
],
});
或者我必须为每个依赖项服务编写一个模拟并像这样使用它们:
const moduleRef = await Test.createTestingModule({
providers: [
MyService,
{
provider: DependencyService,
useClass: DependencyServiceMock,
}
],
});
答案 0 :(得分:1)
我想可以使用提供和导出服务通常依赖的相同依赖项的MockModule
。我还没有听说有人尝试过,但是我不明白为什么它不起作用。所以如果你有
@Injectable()
export class MyService {
constructor(private readonly depService: DependencyService) {}
...
}
然后在您的模拟模块中需要
@Module({
providers: [{
provide: DependencyService,
useClas: DependencyServiceMock,
}],
exports: [DependencyService],
})
export class MockedModule {}
在测试中,您需要做
beforeEach(async () => {
const app = await Test.createTestModule({
imports: [MockedModule],
providers: [MySerivce],
}).compile();
});
...