Jest 因“没有元素索引”而导致覆盖率报告失败

Gur*_*bot 8 javascript reactjs jestjs redux-toolkit msw

我正在为使用 Redux Toolkit 的 Next.js 应用程序运行笑话测试套件。我使用 msw 来模拟对由 Redux Toolkit 处理的 Next 应用程序之外的另一个 api 的任何必要调用。

我没有模拟所有 RTK 查询端点,仅模拟我当前在测试中使用的那些。


当我在没有通过 生成覆盖范围的情况下运行时,测试运行良好npm run test

但是,当我通过 运行覆盖率报告时npm run test -- --coverage,所有测试都会失败,并且都有相同的错误:

- Test suite failed to run

    No element indexed by 9
    
     at ArraySet_at [as at] (node_modules/source-map-support/node_modules/source-map/lib/array-set.js:109:9)
      at BasicSourceMapConsumer.SourceMapConsumer_originalPositionFor [as originalPositionFor] (node_modules/source-map-support/node_modules/source-map/lib/source-map-consumer.js:673:30)
      at mapSourcePosition (node_modules/source-map-support/source-map-support.js:214:42)
      at wrapCallSite (node_modules/source-map-support/source-map-support.js:358:20)
      at node_modules/source-map-support/source-map-support.js:399:26
          at Array.map (<anonymous>)
      at Function.prepareStackTrace (node_modules/source-map-support/source-map-support.js:398:30)
Run Code Online (Sandbox Code Playgroud)

我发现如果将 msw 处理程序设置为空数组,则不会出现错误。正如预期的那样,少数需要 API 的测试失败了。然而,除此之外,测试都运行良好。

我不确定从这里该去哪里。任何意见是极大的赞赏。

Lia*_*iam 5

现在应该修复此错误

如果您仍然遇到此问题,请将 Jest 升级到最新版本。


这个问题似乎与使用 babel 作为代码覆盖率提供程序有关。这就是为什么切换到v8 可以解决这个问题

如果您不想使用 v8(当前标记为实验性)。然后你需要将 babel 安装到你的构建中:

npm install --save-dev babel-jest @babel/core @babel/preset-env
Run Code Online (Sandbox Code Playgroud)

来源

这应该会使上述错误消失。


小智 4

我遇到了几乎相同的问题,但我的案例错误消息是No element indexed by 55。我正在使用 Jest,如果在一个测试中我期望对象不具有某些属性,则会出现此错误。

然后我关闭了代码覆盖率,问题消失了,测试也通过了。但我不想为此关闭它。

最后,对我来说唯一的解决方案是将jest 配置中的coverageProvider更改为v8(默认情况下它使用babel)。