如何解决模拟导入的模块以获得服务
假设我想为一个服务编写一个单元测试,该测试取决于另一个模块的服务。
现在这是我的问题。有什么方法可以编写测试,以便模拟MyService
所依赖的模块,以便可以像这样在单元测试中使用它:
const moduleRef = await Test.createTestingModule({
imports: [
MockedModule,],providers: [
MyService,});
或者我必须为每个依赖项服务编写一个模拟并像这样使用它们:
const moduleRef = await Test.createTestingModule({
providers: [
MyService,{
provider: DependencyService,useClass: DependencyServiceMock,}
],});
解决方法
我想可以使用提供和导出服务通常依赖的相同依赖项的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();
});
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。