相关疑难解决方法(0)

将同一提供程序的两个实例嵌套JS

嗨,在一个测试套件上,我看来我有两个同一提供者的活动实例,一个实例用于实现,另一个实例用于实际实现。

我的结论基于这样一个事实:在测试中,我尝试用jest.fn调用替换方法,但仍然在我测试的服务上,该方法仍指向原始实现。

更奇怪的是,我能够模拟另一个执行完全相同的过程的服务,好像取决于这些服务的注入方式(它们来自容器图中的位置)是否起作用。

我将尝试分享一些片段,但是,当然,只有一个很小的回购实际上可以重现它,但是也许有人有一个见解:

 beforeAll(async done => {
    app = await Test.createTestingModule({
      imports: [
        SOME_MODULES,
      ],
      providers: [
        EssayApplicationService,
        ReviewFacade,
        ExamCacheResultService,
      ],
    }).compile();

    essayApplicationService = app.get<EssayApplicationService>(EssayApplicationService)
    reviewFacade = app.get<ReviewFacade>(ReviewFacade)
    examCacheResult = app.get<ExamCacheResultService>(ExamCacheResultService)
    await app.init()
    done()
  })
Run Code Online (Sandbox Code Playgroud)
it('should invoke review only once', async done => {

    reviewFacade.startReview = jest.fn() --> this works
    examCacheResult.clearCachedResult = jest.fn() --> this fails

    await essayApplicationService.finishApplication()

    expect(reviewFacade.startReview).toHaveBeenCalledTimes(1)
    expect(reviewFacade.startReview).toHaveBeenCalledWith(expect.objectContaining({ id: 1 }))
    expect(examCacheResult.clearCachedResult).toHaveBeenCalledTimes(1) ---> here this fails, although it's called!!
Run Code Online (Sandbox Code Playgroud)

因此,问题归结为以下事实:对于测试中的服务调用了这两种方法,我100%表示肯定,但是由于某种原因第二种方法并未被模拟代替

javascript node.js typescript jestjs nestjs

1
推荐指数
1
解决办法
609
查看次数

标签 统计

javascript ×1

jestjs ×1

nestjs ×1

node.js ×1

typescript ×1