如何从Jest忽略路径中单独运行指定测试用例?
如何在Jest中排除整个目录但单独运行其中某个测试文件?
我的项目结构如下:
src - foo - test A - test B - test C - bar ...
之前通过如下配置忽略了src/foo/下的所有测试用例:
testPathIgnorePatterns: ['src/foo/'],
现在需要单独运行src/foo/test B,但尝试了以下两种配置都无效:
无效配置1
testMatch: [ '**/*.test.{ts,tsx,js,jsx}', 'src/foo/test B', ], testPathIgnorePatterns: ['src/foo/'],
无效配置2
testMatch: [ '**/*.test.{ts,tsx,js,jsx}', '!src/foo/**/*', 'src/foo/test B', ],
解决方法
方法1:修改testPathIgnorePatterns正则,精准排除
Jest中testPathIgnorePatterns的优先级高于testMatch,只要路径被前者匹配就会直接忽略。我们可以用负向前瞻正则,让testPathIgnorePatterns排除src/foo/下除了test B之外的所有文件:
testPathIgnorePatterns: [ 'src/foo/(?!test B).*' ], testMatch: [ '**/*.test.{ts,tsx,js,jsx}' ]
正则解释:(?!test B)是负向前瞻断言,表示匹配src/foo/后**不紧跟test B**的所有路径,这样会跳过test A和test C,只保留test B。
方法2:命令行直接指定测试文件(临时场景更高效)
如果只是临时需要运行这个测试,无需修改配置文件,直接在命令行执行:
# 转义空格 npx jest src/foo/test\ B # 或用引号包裹路径 npx jest "src/foo/test B"
为什么之前的配置无效?
- 第一种配置中,
testPathIgnorePatterns已经把整个src/foo/目录纳入忽略列表,testMatch里的路径会被这个更高优先级的规则覆盖,test B依然不会被执行。 - 第二种配置的
testMatch规则顺序错误:Jest按从上到下的顺序匹配规则,!src/foo/**/*先排除了整个foo目录,后面的src/foo/test B无法覆盖前面的排除规则,一旦路径被排除,就不会再被后续的包含规则匹配。
内容的提问来源于stack exchange,提问作者til
相关产品推荐
相关产品推荐

