【问题标题】:Mocking imported modules for a service模拟服务的导入模块
【发布时间】:2020-12-21 07:43:41
【问题描述】:

假设我想为依赖于另一个模块的服务的服务编写单元测试。

现在这是我的问题。有什么方法可以编写我的测试,以便我模拟 MyService 所依赖的模块,以便我可以像这样在单元测试中使用它:

const moduleRef = await Test.createTestingModule({
    imports: [
        MockedModule,
    ],
    providers: [
        MyService,
    ],
});

或者我必须为每个依赖服务编写一个模拟并像这样使用它们:

const moduleRef = await Test.createTestingModule({
    providers: [
        MyService,
        {
            provider: DependencyService,
            useClass: DependencyServiceMock,
        }
    ],
});

【问题讨论】:

    标签: unit-testing mocking nestjs


    【解决方案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();
    });
    ...
    

    【讨论】:

      猜你喜欢
      • 2015-12-02
      • 2011-11-09
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多