Jest testPathPattern仅匹配首个测试文件的运行配置问题
Jest匹配指定目录测试文件失效解决方案
问题场景
当前仓库测试文件结构如下:
libs/app1/e2e/my-e2e-tests.spec.ts libs/app1/uat/my-uat-test.spec.ts libs/app2/e2e/my-e2e-tests.spec.ts libs/app2/uat/my-uat-test.spec.ts
目标是运行libs/app1目录下所有e2e、uat类型的spec测试文件,两次执行命令均未达预期:
- 执行
jest --testPathPattern=libs/app1/**/*.spec.ts时,仅运行了首个匹配到的文件libs/app1/e2e/my-e2e-tests.spec.ts - 执行正则规则命令
jest --testPathPattern=/libs\/app1\/[a-z]*\/[a-z]*.spec.ts/ig时,依然无法匹配所有目标文件
失效原因
- 第一条命令里的
**glob通配符会被终端shell提前解析展开,不会原样传递给Jest,最终传给Jest的路径参数只有第一个被展开的文件,所以只运行了单文件 - 第二条命令存在两个问题:一是Jest的
--testPathPattern参数接收原生正则字符串即可,不需要额外加正则字面量的边界斜杠/和ig修饰符,加了之后会把斜杠和修饰符当成路径字符匹配,必然匹配失败;二是正则里的[a-z]*只能匹配纯小写字母片段,测试文件名里的连字符-、tests/test的差异都没有覆盖,会漏匹配文件。
正确命令
精准匹配方案(推荐)
直接指定匹配app1下e2e、uat目录的所有spec.ts文件,不会误匹配其他目录:
jest --testPathPattern="libs/app1/(e2e|uat)/.*\.spec\.ts"
简化方案
如果app1目录下没有其他不需要运行的spec文件,可以直接限定查找根目录:
jest --roots libs/app1 --testPathPattern="\.spec\.ts$"
配置提醒
- 给
testPathPattern传参时一定要用引号包裹,避免shell提前转义、展开特殊字符 - 正则里匹配文件后缀的
.属于正则特殊字符,必须转义写为\.,否则会匹配任意字符导致非预期结果 - 不需要手动给正则加全局、忽略大小写修饰符,Jest内部处理路径匹配时已经做了对应适配。
内容的提问来源于stack exchange,提问作者akhil
相关产品推荐
相关产品推荐

