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

Angular单元测试报createSpyObj requires a non-empty array错误排查

根因分析

createSpyObj requires a non-empty array or object of method names是Jasmine框架抛出的标准错误,触发条件为调用jasmine.createSpyObj方法时,传入的方法名参数为空数组、空对象、undefined、null等无效值。

异常残留的原因

你删除新增测试和组件后依旧报错,几乎都是编译/运行缓存导致的:

  • Angular默认开启增量编译,旧的测试编译产物残留在.angular缓存目录中,会被测试进程继续加载
  • Karma测试服务的后台进程没有完全销毁,仍然加载之前的测试代码快照

UI无报错的原因

报错触发在afterAll生命周期阶段,属于所有测试用例执行完成后的收尾环节,部分版本的Karma前端UI不会将这个阶段的异常主动渲染到页面上,你打开Chrome Headless的开发者控制台就可以看到对应的错误堆栈。

解决步骤

  1. 停止当前所有正在运行的测试进程
  2. 删除项目根目录下的.angular缓存文件夹,清除Angular增量编译缓存
  3. 全局搜索项目中所有调用createSpyObj的代码,检查入参是否存在空值的可能,特别注意通过变量动态传入方法名列表的场景:比如先声明变量存储方法名数组,但是变量初始化逻辑异常导致最终传入空值
  4. 可额外执行npm cache clean --force清除npm全局缓存
  5. 重新执行ng test命令即可

内容的提问来源于stack exchange,提问作者Akila Ekanayake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:39:02