开玩笑的异步测试失败

时间:2021-02-13 22:38:20

标签: javascript node.js jestjs

我收到当前错误

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 和命令运行它行,但仍然出现相同的错误。

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

好的,我确实在我的代码中找到了修复它的东西。

我正在从我们拥有的外部模块导入 TokenRepository

import { TokenRepository } from '@company/library'

然后嘲笑它我正在这样做

jest.mock('@company/library')

const TokenRepositoryMock = mocked(TokenRepository, true)

通过更新 jest.mock 路径,它以某种方式开始正常工作。

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

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