【问题标题】:Jest coverage should not include rootDir in path, create mismatch with Cypress coverageJest 覆盖不应在路径中包含 rootDir,与 Cypress 覆盖不匹配
【发布时间】:2020-06-24 14:04:03
【问题描述】:

我需要在 Next.js 应用程序的上下文中合并 Cypress 覆盖率报告和 Jest 覆盖率报告。

Jest 会将文件列为my-app/src/whatever。 Cypress 仅显示 src/whatever

Cypress 不包含 my-app 而 Jest 包含,这会在尝试使用 Cypress 示例中推荐的方法合并覆盖范围时引发问题。另一种方法是让赛普拉斯也显示该文件夹。

解决方案 1:Jest 匹配 Cypress?

我希望 Jest 计算相对于 rootDir 的覆盖文件路径,而不显示它。

例如,覆盖率报告将显示my-app/src/whatever。它应该只显示src/whatever,而不显示my-app

这可行吗?

解决方案 2:Cypress 匹配 Jest?

另一种方法是让赛普拉斯考虑另一个根目录,但我还没有找到这样的选项。这是 imo 最没有希望的选择。有没有相关的选项?

补充问题:这两个工具的行数不同,可能是由于 TypeScript + Babel + Webpack 与代码的交互。如何调试此问题?

谢谢

为清晰起见进行编辑

【问题讨论】:

  • 你能不能简单地将collectCoverageFrom glob 改为src/**,并留下对rootDir 的引用?
  • 从 Cypress 端开始,here 正在发生路径调整。您可以通过在代码覆盖包之后添加它来替换您自己的combineCoverage(sentCoverage) 任务版本,并在其中使用您自己的fixSourcePaths() 版本进行不同的路径调整。可以肯定的是,我需要一个 repo 来测试它。
  • @StevenScott 如果代码位于src 文件夹中,您是对的。但是 Next.js 没有单独的 src 文件夹作为默认文件夹(将代码移动到 src 对我来说确实是一个快速修复)。我很乐意为这个问题找到一个更通用的解决方案,例如当你有两个文件夹时,想象一下 srclegacySrc 出于某种原因。
  • @RichardMatsen 好的,所以基本上这里的问题是赛普拉斯正在用 Jest 没有的路径做一些魔法?
  • fixSourcePaths() 的代码中很难分辨出来,但是 cmets 说它做了两件事 1) 将相对路径更改为绝对路径 2) 删除 webpack 相关的东西。您提到您正在寻找相反的(绝对相对路径),或者您只是在寻找赛普拉斯覆盖范围和 Jest 覆盖范围之间的一致性?由于赛普拉斯包旨在合并这些,它们应该已经是一致的。你应该在你的问题中充实一些细节。

标签: jestjs cypress istanbul


【解决方案1】:

作为特定于 Next 的快速修复,现在可以在 Next 中使用 src 文件夹。因此,将所有可测试的代码放在一个独立的文件夹中可能是一种快速修复。

在您的 Jest 配置中:

  collectCoverageFrom: [
    "src/**/*.{js,jsx,ts,tsx}"
    ...

(不知道为什么,但赛普拉斯在添加src 文件夹时似乎不需要额外的配置)

【讨论】:

  • 若要忽略目录,请以! 为前缀。示例:!**/node_modules/**
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 2015-10-06
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 2017-03-06
相关资源
最近更新 更多