我正在使用 Jest 做一些稍微奇怪的事情来测试我将一些内容写入磁盘的情况。但是,如果我在 Jest 中使用
watch
标志,那么我会发现(非常明显)每次我向磁盘写入内容时,测试都会再次重新触发。
我目前没有任何类型的配置,并且我已经查看了文档,但我真的不清楚需要使用哪个选项来禁止观看特定文件。我相信我可以看到从代码覆盖和测试执行中排除代码的选项,但看不到实际的观察者。
就我而言,我有这样的设置,我只想隐藏我的结果目录:
__tests__
__snapshots__
(由 Jest 创建)results
(由我创建和要排除的目录)我该怎么做?
从文档中,您需要添加 modulePathIgnorePatterns,它是一个将与之匹配的字符串值数组
modulePathIgnorePatterns [数组
] # (默认值:[])匹配的正则表达式模式字符串数组 在考虑这些路径之前针对所有模块路径 对模块加载器“可见”。如果给定模块的路径与任何 的模式,在测试中它不会是 require() 的 环境。这些模式字符串与完整路径匹配。使用
字符串标记,包含项目根目录的路径 目录以防止它意外忽略您的所有文件 在不同的环境中可能有不同的根目录。 示例:[' /build/'].
https://facebook.github.io/jest/docs/configuration.html#modulepathignorepatterns-array-string
将此添加到您的配置中...
modulePathIgnorePatterns: ["directoryNameToIgnore"]
或:
modulePathIgnorePatterns: ["<rootDir>/dist/"]
要从 Jest 测试中排除目录,请使用 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": {}
}
当我有一个不得测试的目录时,我遇到了同样的问题,尽管我仍然希望它位于
__tests__
目录内(例如,__mocks__
)。
在这种情况下,您不应使用相对路径(无斜杠)。所以在你的
package.json
文件中添加:
jest: {
"modulePathIgnorePatterns": ["__mocks__"]
}
这解决了我的问题。
根据 Jest 文档,watchPathIgnorePatterns 应该是您想要的方式。这适用于 Jest 23.x.x 及更高版本。
您可以将此配置添加到
jest.config.js
或 package.json > jest
笑话版本:27.2.1
为了从测试和覆盖范围中排除:
"testPathIgnorePatterns" : [
"tests/login/default/MockStrategy.js",
],
coveragePathIgnorePatterns: [
"tests/login/default/MockStrategy.js"
],
我使用以下模式,它对我有用:
collectCoverageFrom: [
'src/**/*.js',
'!src/api/graphql/**/*.js',
'!src/action/**/*.js',
'!src/utils/dev/*.js',
'!src/**/*.e2e.js',
],
!意味着我们排除该文件夹或文件。
要排除整个文件夹,请在package.json文件的“jest”属性中添加以下内容:
"modulePathIgnorePatterns": [
"<rootDir>/src/services"
],
要排除一个单个文件:
"collectCoverageFrom": [
"!src/index.js"
],
您的测试套件必须至少包含一项测试。
要在测试中忽略/排除文件或文件夹,请修改 package.json如果“jest”块不存在,请像这样添加它:
...
"jest": {
"collectCoverage": true,
"testPathIgnorePatterns" : [
"__tests__/properties.js",
"__tests__/properties.js.sample"
]
},
...
以下内容在监视模式下运行 jest,但不包括独立于 npm 的端到端测试文件夹。您可能会将其放在脚本部分中,但如果您这样做,请不要忘记删除“npx”。
npx jest --watchAll --testPathIgnorePatterns "e2e_a/" "e2e_b/"
PS:某些测试,尤其是 E2E 测试,可能需要使用 -i, --runInBand
标志按顺序运行。如果它们有自己的文件夹,这对于将它们排除在监视模式之外非常有用。所以更喜欢将它们放在单独的文件夹中。
以下是 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
testRegex
中添加
jest.config.js
对我来说是完整的解决方案,它指定了要测试哪些文件!
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$'
"jest": {
"collectCoverageFrom": [
"src/**/*.{js,jsx,ts,tsx}",
"!<rootDir>/src/registerServiceWorker.js",
"!<rootDir>/src/serviceWorker.js",
"!<rootDir>/node_modules/"
]
},
package.json
中使用此配置从覆盖率报告中排除
index.js
和
reportWebVitals.js
文件。
"jest": {
"collectCoverageFrom": [
"!<rootDir>/src/reportWebVitals.js",
"!<rootDir>/src/index.js"
],
}
/* 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>
</>
)
}