You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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:配置支持命令行直接指定文件

如果需要长期支持命令行指定单个测试文件,做如下调整:

  1. 检查angular.json中对应项目的architect.test.options配置,删除全局包含所有spec文件的配置项
  2. 执行命令时使用相对路径(相对于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:36:04