在运行 `npm test` 时忽略特定的文件。
在使用`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`运行单个测试的能力。
原因:使用`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)