如何从 Jest watch 中排除文件?

问题描述 投票:0回答:14

我正在使用 Jest 做一些稍微奇怪的事情来测试我将一些内容写入磁盘的情况。但是,如果我在 Jest 中使用

watch
标志,那么我会发现(非常明显)每次我向磁盘写入内容时,测试都会再次重新触发。

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

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

  • __tests__
  • __snapshots__
    (由 Jest 创建)
  • results
    (由我创建和要排除的目录)
  • 测试文件1.js

我该怎么做?

javascript jestjs
14个回答
236
投票

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

modulePathIgnorePatterns [数组] #

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

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

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

modulePathIgnorePatterns: ["directoryNameToIgnore"]

或:

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

86
投票

要从 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": {}
    }

18
投票

当我有一个不得测试的目录时,我遇到了同样的问题,尽管我仍然希望它位于

__tests__
目录内(例如,
__mocks__
)。

在这种情况下,您不应使用相对路径(无斜杠)。所以在你的

package.json
文件中添加:

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

这解决了我的问题。


13
投票

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

您可以将此配置添加到

jest.config.js
package.json > jest


8
投票

笑话版本:27.2.1

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

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

7
投票

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

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

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


6
投票

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

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

排除一个单个文件:

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

4
投票
在大多数情况下,您会收到错误消息:

您的测试套件必须至少包含一项测试。

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

如果“jest”块不存在,请像这样添加它:

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

3
投票
我一直在寻找命令行方法来执行此操作,而无需每次尝试更改内容时都编辑配置文件。

以下内容在监视模式下运行 jest,但不包括独立于 npm 的端到端测试文件夹。您可能会将其放在脚本部分中,但如果您这样做,请不要忘记删除“npx”。

npx jest --watchAll --testPathIgnorePatterns "e2e_a/" "e2e_b/"
PS:某些测试,尤其是 E2E 测试,可能需要使用 

-i, --runInBand

 标志按顺序运行。如果它们有自己的文件夹,这对于将它们排除在监视模式之外非常有用。所以更喜欢将它们放在单独的文件夹中。


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


1
投票
我也有类似的情况,在

testRegex

中添加
jest.config.js
对我来说是完整的解决方案,它指定了要测试哪些文件!

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

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

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

0
投票
我在

package.json

 中使用此配置从覆盖率报告中排除 
index.js
reportWebVitals.js
 文件。

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

0
投票
忽略整个文件

/* istanbul ignore file */ import { useState } from "react"; import ReactDOM from "react-dom/client"; const FavoriteColor = () => { const [color, setColor] = useState("red"); return ( <> <h1>My favorite color is {color}!</h1> </> ) }
    
© www.soinside.com 2019 - 2024. All rights reserved.