如何从 Jest watch 中排除文件?

我正在做一些有点奇怪的东西,使用 Jest 来测试我在哪里写一些东西到磁盘。然而,如果我在 Jest 中使用 watch标志,那么我会发现(非常明显) ,每次我写一些东西到磁盘时,测试都会重新启动。

我目前没有任何类型的配置,我已经看了一下 文件,但是我真的不清楚我需要使用哪个选项来禁止查看特定的文件。我相信我可以看到从代码覆盖率和测试执行中排除代码的选项,但不能看到实际的观察者。

在我的例子中,我有一个这样的设置,我只是想压制我的结果目录:

  • __tests__
  • __snapshots__(由 Jest 创作)
  • results(由我和要排除的目录创建)
  • Testfile1.js

我怎么能这么做?

144762 次浏览

从文档中,您需要添加 modulePathIgnorepattern,它是一个字符串值数组,将根据该数组进行匹配

ModulePathIgnorepattern [ array < string > ] #

(default: [])匹配的 regexp 模式字符串的数组 在考虑这些路径之前,对所有模块路径进行检查 模块加载程序“可见”。如果给定模块的路径与任何 的模式,它将不会被要求()-能够在测试中 这些模式字符串与完整路径匹配。使用 < rootDir > 字符串标记,以包含项目根目录的路径 目录,以防止它意外地忽略您的所有文件 在可能有不同根目录的不同环境中。 示例: [’< rootDir >/build/’]。

Https://facebook.github.io/jest/docs/configuration.html#modulepathignorepatterns-array-string

把这个加到你的配置里。

modulePathIgnorePatterns: ["directoryNameToIgnore"]

或:

modulePathIgnorePatterns: ["<rootDir>/dist/"]

要从 Jest 测试中排除某个目录,请使用 testPathIgnorePattern

TestPathIgnorepattern

"testPathIgnorePatterns": ["directory to ignore"]

在下面的 包裹 Json文件中,我已经配置为忽略“ src”目录

{
"name": "learn-test",
"jest": {
"testPathIgnorePatterns": ["src"]
},
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-scripts": "1.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "jest --watch",
"eject": "react-scripts eject",


},


"devDependencies": {}
}

根据 Jest 文档,观察病理模式应该是您想要的方式,它可以在 Jest 23.x.x 及更高版本中使用。

您可以将此配置添加到 jest.config.jspackage.json > jest

当我有一个不能测试的目录时,我遇到了同样的问题,尽管我仍然希望它在 __tests__目录中(例如,__mocks__)。

在这种情况下你不应该使用使用相对路径(没有斜杠)。所以在你的 package.json文件中添加:

jest: {
"modulePathIgnorePatterns": ["__mocks__"]
}

这解决了我的问题。

包裹 Json文件的“ jest”属性中,将以下内容添加到 排除完整的文件夹中:

"modulePathIgnorePatterns": [
"<rootDir>/src/services"
],

排除发送一个 个人文件:

"collectCoverageFrom": [
"!src/index.js"
],

使用最新版本的 create-response-app,jest 中的“ CollectCoverageFrom”可以跳过测试用例报告集合中的文件:

"jest": {
"collectCoverageFrom": [
"src/**/*.{js,jsx,ts,tsx}",
"!<rootDir>/src/registerServiceWorker.js",
"!<rootDir>/src/serviceWorker.js",
"!<rootDir>/node_modules/"
]
},

我使用以下模式,它对我很有效:

collectCoverageFrom: [
'src/**/*.js',
'!src/api/graphql/**/*.js',
'!src/action/**/*.js',
'!src/utils/dev/*.js',
'!src/**/*.e2e.js',
],

! 意味着我们排除文件夹或文件。

在大多数情况下,你会得到这样的错误: 测试套件必须至少包含一个测试。

要从测试中忽略/排除文件或文件夹,请修改 package.json

如果块“ jest”不存在,添加如下:

...
"jest": {
"collectCoverage": true,
"testPathIgnorePatterns" : [
"__tests__/properties.js",
"__tests__/properties.js.sample"
]
},
...

我在我的 package.json中使用这个配置来从覆盖率报告中排除 index.jsreportWebVitals.js文件。

  "jest": {
"collectCoverageFrom": [
"!<rootDir>/src/reportWebVitals.js",
"!<rootDir>/src/index.js"
],
}

以下是我对这个问题的看法,因为我觉得上面的答案有些混乱:

下面是 package.json 文件中的 jest 段:

"jest": {
"testPathIgnorePatterns": ["wallet-svc/src/db/"],
"coveragePathIgnorePatterns": ["wallet-svc/src/db/"],
"modulePathIgnorePatterns": ["wallet-svc/src/db/"],
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}

如果你注意到我提到了3个忽略-“ testPathIgnorepattern”,“ CoveragePathIgnorepattern”和“ modulePathIgnorepattern”。当您运行测试时,这些文件会被忽略,但是当您运行覆盖率时,jest 不会忽略这些文件,您可以在覆盖率报告中看到它们。最好包括所有3个标签。

我发现这个帖子很有帮助: https://github.com/facebook/jest/issues/1815#issuecomment-684882428

玩笑版本: 27.2.1

为了排除在测试和覆盖范围之外:

"testPathIgnorePatterns" : [
"tests/login/default/MockStrategy.js",
],
coveragePathIgnorePatterns: [
"tests/login/default/MockStrategy.js"
],

我有过类似的情况,在 jest.config.js中添加 testRegex对我来说是完整的解决方案,它指定了确切要测试的文件!

testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$'

我正在寻找这样做的命令行方式,无需编辑配置文件,每次我尝试更改东西。

以下命令以监视模式运行 jest,但不包括与 npm 无关的端到端测试文件夹。你可能有它在脚本部分,但如果你这样做,然后不要忘记删除“ npx”。

npx jest --watchAll --testPathIgnorePatterns "e2e_a/" "e2e_b/"

PS: 一些测试,特别是 E2E 测试,可能需要用 -i, --runInBand标志顺序运行。如果它们有自己的文件夹,那么将它们从监视模式中排除就很有用。所以最好把它们放在不同的文件夹里。