Angular 17组件单元测试:input.required输入设置失败求助
解决Angular 17信号输入的单元测试设置问题
针对你用input.required()定义的必填输入,在Angular 17.0.3的单元测试中,不能直接赋值信号变量,也可能因版本兼容问题导致setInput()报错,以下是两种可行的解决方式:
方法1:创建组件时传入输入参数
在TestBed.createComponent()中直接通过inputs配置项传递输入值,这是Angular 17测试信号输入的推荐方式之一:
fixture = TestBed.createComponent(MyComponent, { inputs: { regex: new FormControl('') } }); component = fixture.componentInstance; fixture.detectChanges();
方法2:通过组件实例的输入别名直接赋值
因为你给信号输入设置了alias: 'regex',组件内部会映射出一个名为regex的输入属性,直接对其赋值后触发变更检测即可:
fixture = TestBed.createComponent(MyComponent); component = fixture.componentInstance; // 注意这里用别名而非信号变量名 component['regex'] = new FormControl(''); fixture.detectChanges();
为什么之前的方法报错?
fixture.componentRef.setInput()在Angular 17早期版本(如17.0.3)中对信号输入的支持存在兼容问题,后续版本已修复。- 直接赋值
regexCtrl会报错是因为input.required()返回的是只读的InputSignal,不能直接覆盖赋值,必须通过框架的输入绑定机制更新其值。
内容的提问来源于stack exchange,提问作者Jeanluca Scaljeri
相关产品推荐
相关产品推荐

