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

Angular Jest单元测试用contentChildren报错,@ContentChildren正常

问题描述

在为基础Angular组件编写Jest单元测试时,使用VS Code的Jest Runner扩展运行测试时出现报错:TypeError: Cannot read properties of undefined (reading 'Symbol(SIGNAL)')。

  • 测试代码、待测试组件及被Mock的指令代码可在对应复现仓库中查看
  • 特殊情况:用@ContentChildren装饰器替代contentChildren()函数时,测试能正常执行
  • 相关问题已在ng-mocks仓库的第8895号Issue中记录
问题成因

该错误源于ng-mocks库对Angular 16+引入的信号式contentChildren() API支持不完善:

  • contentChildren()是Angular推出的信号式内容查询新API,ng-mocks当前版本的Mock逻辑未正确处理该API的信号内部属性,导致访问Symbol(SIGNAL)时出现未定义错误
  • 而@ContentChildren是传统装饰器式API,ng-mocks对其已有成熟的Mock支持,因此不会触发该异常
修复方案

提供两种可行解决途径:

临时替代方案

暂时沿用@ContentChildren装饰器编写组件的内容查询逻辑,避开contentChildren()信号式API,直到ng-mocks修复兼容性问题。

官方修复升级方案

  1. 跟进ng-mocks仓库第8895号Issue的修复进度,待官方发布修复版本后,升级ng-mocks至对应版本即可解决问题
  2. 若需紧急临时修复,可手动调整ng-mocks的Mock逻辑(不推荐,维护成本较高):
    • 在Mock组件/指令时,为contentChildren()返回的信号对象补充Symbol(SIGNAL)属性的定义
    • 确保Mock的查询结果结构符合Angular信号式API的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:12:42