ChatGPT解决这个技术问题 Extra ChatGPT

如何从 Jest watch 中排除文件?

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

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

就我而言,我有这样的设置,我只想禁止我的结果目录:

__测试__

__snapshots__(由 Jest 创建)

结果(由我和要排除的目录创建)

testfile1.js

我怎样才能做到这一点?


P
Peter Mortensen

从文档中,您需要添加 modulePathIgnorePatterns 这是一个字符串值数组,将与之匹配

modulePathIgnorePatterns [array] # (default: []) 一个正则表达式模式字符串数组,在这些路径被认为对模块加载器“可见”之前与所有模块路径匹配。如果给定模块的路径与任何模式匹配,则它在测试环境中将不是 require()-able。这些模式字符串与完整路径匹配。使用 字符串标记来包含项目根目录的路径,以防止它意外忽略可能具有不同根目录的不同环境中的所有文件。示例:['/build/']。

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

将此添加到您的配置中...

modulePathIgnorePatterns: ["directoryNameToIgnore"]

或者:

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

我已经尝试使用 "jest": { "modulePathIgnorePatterns": ["__tests__/results/"] },,但不幸的是它不起作用。
你能试着缩短它吗? “笑话”:{“modulePathIgnorePatterns”:[“测试”]},
__tests__jest 用来加载其测试的默认目录。所以重命名会很尴尬,我可以将我的 results 目录移到 __tests__ 之外,但我不愿意这样做,除非我找不到替代品。
是的,您可能是对的,我只是想知道 pathName 是否因斜线而窒息。在大多数情况下,当我在 webpack 中使用排除目录时,我不包括正斜杠,而只包括目录的名称,如“node_module”等......
真的。我刚刚尝试将目录向上移动,似乎没有任何区别。我已经确定它是其中的一个 JSON 文件,我正在修改它导致问题。试图排除它似乎仍然没有多大作用:(
P
Peter Mortensen

要从 Jest 测试中排除目录,请使用 testPathIgnorePatterns

testPathIgnorePatterns

"testPathIgnorePatterns": ["directory to ignore"]

在 package.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": {}
    }

"testPathIgnorePatterns": ["<rootDir>/cypress/"] 见这里:github.com/wallabyjs/public/issues/2245
搜索 10 分钟后的最佳答案。
modulePathIgnorePatterns 有什么区别?
这个对我有用,不像 modulePathIgnorePatterns
谢谢,我无法让 testPathIgnorePatterns 做任何事情。
P
Peter Mortensen

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

在这种情况下,您不应使用相对路径(无斜杠)。因此,在您的 package.json 文件中添加:

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

这解决了我的问题。


N
Nima Soroush

根据 Jest 文档,watchPathIgnorePatterns 应该是您想要的方式。这适用于 Jest 23.xx 及更高版本。

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


P
Peter Mortensen

要排除整个文件夹,请在 package.json 文件的“jest”属性中添加以下内容:

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

要排除单个文件:

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

谢谢,正在工作 添加正则表达式示例 "collectCoverageFrom": [ "src/**/*.{ts,js}", "!src/db_access/*.{ts,js}", "!src/**/__fixtures /.{ts,js,json}", "!src/**/__removed__/.{ts,js,json}", "!src/models/.{ts,js,json}"]
P
Peter Mortensen

我使用以下模式,它适用于我:

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

!表示我们排除文件夹或文件。


在什么文件里?包.json?您可以将其添加到您的答案中吗?
在 jest.config.js 文件中
J
JRichardsz

开玩笑版本:27.2.1

为了从测试和覆盖中排除:

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

Y
Yuriy

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

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

如果块“jest”不存在,那么添加它:

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

它实际上工作得很好。我更喜欢这个,因为我不需要添加文件夹。我注意到您必须重新启动“手表”才能使其生效的一件事。
H
Harshil

这是我的 2 美分,因为我觉得上面的答案有些混乱:

以下是 package.json 文件中的笑话段:

"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 个忽略 - “testPathIgnorePatterns”、“coveragePathIgnorePatterns”和“modulePathIgnorePatterns”。当您运行测试时会发生这种情况,文件被忽略,但是当您运行覆盖时,jest 不会忽略这些文件,您会在覆盖报告中看到它们。最好包含所有 3 个标签。

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


P
Peter Mortensen

可以使用最新版本的 create-react-app 中的“collectCoverageFrom”跳过测试用例报告集合中的文件,开玩笑:

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

在什么文件里?文件的名称是什么?
缺少:Note: This option requires collectCoverage to be set to true or Jest to be invoked with --coverage.
c
coderpc

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

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