在运行 `npm test` 时忽略特定的文件。

15 浏览
0 Comments

在运行 `npm test` 时忽略特定的文件。

目前,npm test正在运行所有具有.test.js扩展名的文件。我希望忽略一些文件。我应该在哪里配置这个选项?我尝试了在package.json中添加以下内容:

"jest": {

"collectCoverageFrom": [

"src/App.test.js"

]

},

但是我没有看到任何变化。

0
0 Comments

在使用`npm test`运行测试时,有时需要忽略某些文件。下面是解决这个问题的原因和方法。

在`package.json`文件中,只允许使用`create-react-app`来覆盖以下Jest配置:

"jest": {

"collectCoverageFrom": [],

"coverageThreshold": {},

"coverageReporters": [],

"snapshotSerializers": []

}

解决方法1:

使用`testPathIgnorePatterns`配置项,eject Create React App并进行配置。

解决方法2:

可以通过将`--testPathIgnorePatterns`选项传递给`react-scripts test`来覆盖Jest的配置。例如:

"test": "react-scripts test --testPathIgnorePatterns=src/ignoredDirectory --env=jsdom"

如果我只想运行特定目录下的文件,应该怎么做?

可以使用`--testMatch`选项来指定要运行的测试文件。例如:

"test": "react-scripts test --env=jsdom --testMatch=src/App.test.js"

然而,有时`npm test`命令返回0个匹配项,这可能是由于配置不正确。可以参考这个回答:stackoverflow.com/questions/44446626/…

需要注意的是,通过命令行参数`testPathIgnorePatterns`来忽略某个文件会破坏使用`npm test Testname`或`npm test -- -t TestName`运行单个测试的能力。

0
0 Comments

原因:使用`testPathIgnorePatterns`作为cli参数会导致意外的副作用,无法使用`npm test TestName`或`npm test -- -t TestName`来运行单个测试,因为`testPathIgnorePatterns`会贪婪地接受后面的参数作为值。

解决方法:不使用`testPathIgnorePatterns`的cli参数,而是使用`testMatch`的jest配置来达到忽略文件的目的。可以通过设置正则表达式来忽略特定的文件或只包含特定的文件。

示例1:忽略`e2e`目录下的所有文件

"testMatch": [
  "/src/(?!e2e)*/**/__tests__/**/*.{js,jsx,ts,tsx}",
  "/src/(?!e2e)*/**/*.{spec,test}.{js,jsx,ts,tsx}"
]

示例2:只包含特定目录下的测试文件

"testMatch": [
  "/src/modules/**/__tests__/**/*.{js,jsx,ts,tsx}",
  "/src/modules/**/*.{spec,test}.{js,jsx,ts,tsx}"
]

此外,`testPathIgnorePatterns`可以在`package.json`中进行配置,无需更改`npm test`命令。根据官方文档,`testPathIgnorePatterns`在`package.json`中是可配置的。

参考文档:[testMatch](https://jestjs.io/docs/configuration#testmatch-arraystring),[create-react-app.dev/docs/running-tests/#configuration](https://create-react-app.dev/docs/running-tests/#configuration)

0