如何从 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.js
和reportWebVitals.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.js
或package.json > 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": ["<rootDir>/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 中排除文件?的主要内容,如果未能解决你的问题,请参考以下文章