代码之家  ›  专栏  ›  技术社区  ›  nzmattman

Jest异步测试失败

  •  0
  • nzmattman  · 技术社区  · 5 年前

    我得到了当前的错误

    Cannot read property 'indexOf' of undefined
    
        at Function.isPendingSpecException
    

    我认为问题可以归结为这一行代码

    TokenRepositoryMock.findTokenRecordByToken.mockImplementationOnce(
      async () => null,
    )
    

    如果我把代码改成这个,我就不会再收到错误了。

    TokenRepositoryMock.findTokenRecordByToken.mockImplementationOnce(
      async () => ValidToken,
    )
    

    我需要这个函数返回null,以便测试失败的代码。 这是我正在测试的方法

    public static validate(): Middleware {
      return async (ctx: Context, next: Next): Promise<void> => {
        const token = ctx.data.get('token')
    
        const tokenRecord: AccountToken | null = await TokenRepository.findTokenRecordByToken(
          token,
        )
    
        if (!tokenRecord) {
          ctx.status = HttpStatus.UNAUTHORIZED
          throw new InvalidTokenError()
        }
    
        ctx.data.set('token', tokenRecord)
    
        await next()
      }
    }
    

    我在网上看到一些帖子说,这可能是Intellij IDEA的错误( https://stackoverflow.com/a/54425293/9431766 )然而,jest 24.0.0,我运行的是26.6.3,也通过PhpStorm和命令行运行,但仍然会得到相同的错误。

    有没有关于如何解决这个问题的建议?

    0 回复  |  直到 5 年前
        1
  •  0
  •   nzmattman    5 年前

    好吧,所以我确实在代码中找到了修复它的方法。

    我在进口 TokenRepository 从我们的外部模块。

    import { TokenRepository } from '@company/library'

    然后为了嘲弄它,我就这么做了

    jest.mock('@company/library')
    
    const TokenRepositoryMock = mocked(TokenRepository, true)
    
    

    通过更新 jest.mock 它不知怎么开始正常工作了。

    比如。 jest.mock('@company/library/dist/token/TokenRepository')

    奇怪的是,这又开始起作用了