Jest 查找测试但不收集覆盖率

Lua*_*ual 32 typescript istanbul reactjs jestjs

我尝试使用此项目收集测试覆盖率

yarn test --coverage # i.e. "react-scripts test --coverage"
Run Code Online (Sandbox Code Playgroud)

我的笑话配置是这样的:

  "jest": {
    "collectCoverageFrom": [
      "src/**/*.ts*"
    ],
    "coverageThreshold": {
      "global": {
        "lines": 90,
        "statements": 90
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

我的文件夹结构如下:

.
??? package.json
??? postcss.config.js
??? public/
??? README.md
??? src/
?   ??? App.css
?   ??? App.test.tsx
?   ??? App.tsx
?   ??? assets/
?   ??? components/
?   ?   ??? Emoji/
?   ?   ?   ??? Emoji.test.tsx
?   ?   ?   ??? Emoji.tsx
?   ?   ?   ??? index.ts
?   ?   ??? Home/
?   ?       ??? Home.css
?   ?       ??? Home.test.tsx
?   ?       ??? Home.tsx
?   ?       ??? index.ts
?   ??? index.css
?   ??? index.tsx
?   ??? react-app-env.d.ts
?   ??? serviceWorker.ts
??? tsconfig.json
??? yarn-error.log
??? yarn.lock
Run Code Online (Sandbox Code Playgroud)

Jest 能够找到所有测试,但无法收集覆盖范围:

 PASS  src/components/Home/Home.test.tsx
 PASS  src/components/Emoji/Emoji.test.tsx
 PASS  src/App.test.tsx
----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |        0 |        0 |        0 |        0 |                   |
----------|----------|----------|----------|----------|-------------------|

Test Suites: 3 passed, 3 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.432s
Ran all test suites.
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我应该在配置中添加什么以获得覆盖范围?

欢迎任何提示:)

尝试

  1. 将 glob 模式更改为"src/**/*.{js,jsx,ts,tsx}".
  2. 删除node_modules然后运行yarn以重新安装所有内容。
  3. 删除node_modules和yarn.lock,然后重新安装所有内容,这导致了另一个错误,我试图解决安装该特定依赖项的问题,但没有奏效。
  4. 从 GitHub 克隆存储库,然后在新版本上运行命令。
  5. 切换到不同的 Node 版本(v10.16.2 和 v11.7.0)。

ato*_*tom 42

我在评论中说的快速修复,--watchAll改为使用,例如:react-scripts test --coverage --watchAll。

仅供将来参考,我认为理想情况下我们应该使用--watch,它只会在更改的文件上运行,但它给了我同样的麻烦。我认为这与这个问题有关 '--coverage --watch' 应该在第一次迭代时计算所有文件的覆盖率,还有这个问题No coverage when running in watch mode。我不确定为什么它适用于某些人而不适用于您,大概与 Git 和文件暂存有关。


Jem*_*nes 15

不一定是原始提问者案例中的解决方案,但我遇到了完全相同的问题,这是我的解决方案:

我发现在升级 jest(从 23 到 26)时遇到了这个问题,并且解决方案是使用该--no-cache选项运行。据推测,他们在内部更改了这些覆盖率报告的某些内容,使得缓存的数据不兼容。

  • 我已从 24 升级到 26,并在解决问题后使用“--no-cache”运行。之后我必须使用“--watchAll”来执行覆盖任务,否则它会显示空结果 (3认同)

小智 10

对我有帮助的是,而不是

npm run test
Run Code Online (Sandbox Code Playgroud)

或者

npm run test --watchall
Run Code Online (Sandbox Code Playgroud)

我这样做了:

npm run test a
Run Code Online (Sandbox Code Playgroud)

和

npm run test a -- --coverage
Run Code Online (Sandbox Code Playgroud)


Mat*_*tta 7

似乎在 Linux Mint 19.2 上运行良好。我建议将您的 jest 配置更改为更灵活的配置:

"jest": {
    "collectCoverageFrom": [
      "src/**/*.{js,jsx,ts,tsx}",
      "!<rootDir>/node_modules/"
    ],
    "coverageThreshold": {
      "global": {
        "lines": 90,
        "statements": 90
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

package.json如果您正在使用,然后更改您的测试脚本npm(yarn您可以只添加 append --coverage,例如:yarn test --coverage;但是,使用npm,它只会忽略它)。所以我建议要么这样做:

 "test": "react-scripts test --coverage",
Run Code Online (Sandbox Code Playgroud)

或者,我建议使用yarnover npm。要安装纱线,请使用以下方法之一。

在职的: 在此处输入图片说明


小智 5

对我来说,<rootDir>缺少了,添加后效果很好。

"collectCoverageFrom": [ "<rootDir>/**/*.{js,jsx,ts,tsx}" ]