Angular测试中校验器文件同步函数阻塞测试运行问题求助
问题解决方案
1. 修复表单构造语法错误
你当前的formBuilder.group写法存在参数传递错误,atLeastOneCheckbox作为分组级校验器,应该作为group方法的第二个参数传入,而不是写在第一个参数的控件配置对象里:
错误写法:
grids: this.formBuilder.group({ respGrid: this.formBuilder.array(grids), atLeastOneCheckbox(1)) }),
正确写法:
grids: this.formBuilder.group({ respGrid: this.formBuilder.array(grids) }, { validators: atLeastOneCheckbox(1) }),
该语法错误会直接导致表单初始化阶段抛出异常,中断后续代码执行,和你描述的「运行到函数位置就中断」的表现完全吻合。
2. 校验器内部逻辑不触发问题
atLeastOneCheckbox是高阶函数,你调用atLeastOneCheckbox(1)时仅会返回校验函数本体,内部的validate校验逻辑只会在表单触发校验动作时才会执行(比如表单值变更、手动调用updateValueAndValidity、提交表单等)。如果你在返回的validate函数内写console.log,没有触发校验的前提下自然不会输出。
3. getRealCheckedValues执行异常排查
可以按顺序排查以下问题:
- 确认测试环境是否配置了
@core路径别名:Angular脚手架默认在tsconfig.json配置了paths别名,但测试运行器(Jest/Karma)需要单独配置对应的别名映射,否则会出现导入失效、导入的函数为undefined的情况,调用时直接抛出引用错误中断执行 - 确认参数合法性:调用前打印两个入参的值,确认
aChecked确实是布尔数组、aValues和aChecked的长度一致,如果aChecked为null/undefined、或者索引超出范围,会直接抛出类型错误中断执行 - 确认调用逻辑可达性:在调用
getRealCheckedValues的前一行加console.log,确认该行代码确实被执行,排除上层逻辑分支未走到的情况
内容的提问来源于stack exchange,提问作者Splinteer
相关产品推荐
相关产品推荐

