如何从 Jest watch 中排除文件?

Posted

技术标签:

【中文标题】如何从 Jest watch 中排除文件?【英文标题】:How can I exclude files from Jest watch? 【发布时间】:2017-03-22 01:25:00 【问题描述】:

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

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

在我的情况下,我有这样的设置,我只想隐藏我的结果目录:

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

我该怎么做?

【问题讨论】:

【参考方案1】:

笑话版本:27.2.1

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

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

【讨论】:

【参考方案2】:

这是我的 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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

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

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

【讨论】:

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

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

您可以将此配置添加到jest.config.jspackage.json &gt; jest

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

在什么文件中? package.json?您可以将其添加到您的答案中吗? 在 jest.config.js 文件中【参考方案7】:

可以在最新版本的 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.【参考方案8】:

排除一个整个文件夹,在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"]【参考方案9】:

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

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

jest: 
  "modulePathIgnorePatterns": ["__mocks__"]

这解决了我的问题。

【讨论】:

【参考方案10】:

要从 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": ["&lt;rootDir&gt;/cypress/"] 看这里:github.com/wallabyjs/public/issues/2245 搜索 10 分钟后的最佳答案。 modulePathIgnorePatterns有什么区别? 这个对我有用,不像 modulePathIgnorePatterns 谢谢我无法让 testPathIgnorePatterns 做任何事情。【参考方案11】:

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

以上是关于如何从 Jest watch 中排除文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 create-react-app 测试中排除 node_modules?

排除在TypeScript中监视目录

如何从发布中排除 .less 文件?

如何从Visual Studio中排除文件编译?

如何从覆盖范围中排除文件?

如何从 maven 项目中自动排除未使用的 jar 文件?