使用Angular CLI ng test --include无法运行单个.spec.ts文件如何解决
问题根源
你当前的配置默认会全局加载所有.spec测试文件,所以即使添加了--include参数也会被全量加载逻辑覆盖:
- test.ts 中
require.context('./', true, /\.spec\.ts$/)这行代码会递归扫描src目录下所有后缀为.spec.ts的文件并全部加载 - 若angular.json/karma.conf.js中存在全局的测试文件匹配规则,也会导致单个文件指定不生效
解决方案
下面提供3种常用方案,可根据使用场景选择:
方案1:临时聚焦测试用例(最简便,无需改配置)
直接修改目标测试文件的语法:
- 要跑单个文件的所有用例:把文件顶层的
describe改为fdescribe - 要跑单个用例:把对应的
it改为fit
执行普通ng test命令时,Karma会自动只运行带f前缀的测试内容,测试完成后改回原语法即可。Ionic项目可将命令替换为ionic test,规则一致。
方案2:修改test.ts临时指定单个文件
把test.ts中require.context的第三个正则参数改为你要运行的文件路径匹配规则,例如要跑login.page.spec.ts:
// 注释原全量匹配代码 // const context = require.context('./', true, /\.spec\.ts$/); // 修改为目标文件匹配规则 const context = require.context('./', true, /login\.page\.spec\.ts$/);
执行ng test --source-map=false就只会运行该单个文件,需要跑其他文件时修改正则即可。
方案3:配置支持命令行直接指定文件
如果需要长期支持命令行指定单个测试文件,做如下调整:
- 检查angular.json中对应项目的
architect.test.options配置,删除全局包含所有spec文件的配置项 - 执行命令时使用相对路径(相对于angular.json所在的项目根目录),不要用引号包裹路径避免终端解析错误:
# 普通Angular项目 ng test --include=src/app/login/login.page.spec.ts --source-map=false # Ionic项目 ionic test --include=src/app/login/login.page.spec.ts --source-map=false
如果是较新版本Angular,也可以用更精准的匹配参数:
ng test --test-path-pattern=login.page.spec.ts --source-map=false
内容的提问来源于stack exchange,提问作者Usama Abbas
相关产品推荐
相关产品推荐

