Angular14迁移后单元测试报NullInjectorError:缺少UntypedFormBuilder提供者
解决Angular 14迁移后UntypedFormBuilder单元测试报错问题
针对你遇到的NullInjectorError: No provider for UntypedFormBuilder!错误,提供以下排查和解决思路:
移除手动添加的UntypedFormBuilder提供者
ReactiveFormsModule已经内置提供了UntypedFormBuilder服务,你在providers数组中手动声明反而可能导致注入冲突。直接删除providers里的UntypedFormBuilder条目,保留ReactiveFormsModule导入即可。确认导入路径正确性
确保组件和测试文件中,UntypedFormBuilder是从@angular/forms正确导入的:import { UntypedFormBuilder } from '@angular/forms';避免从第三方库或自定义路径导入同名对象。
尝试切换为类型化FormBuilder
Angular 14更推荐使用类型化表单API,如果你不需要未类型化版本,可以将组件中的UntypedFormBuilder替换为FormBuilder,测试模块无需额外配置,ReactiveFormsModule会自动提供该服务。检查测试初始化流程
确保测试套件的初始化逻辑完整,比如在beforeEach中调用TestBed.compileComponents()(当组件使用templateUrl而非内联模板时),或者确认configureTestSuite的执行时机正确,没有被其他逻辑干扰。
调整后的测试配置示例:
configureTestSuite(() => { TestBed.configureTestingModule({ imports: [ ReactiveFormsModule, TranslateModule.forRoot(), BrowserAnimationsModule, NzStepsModule, NzAlertModule, NzSpinModule, NzCheckboxModule ], declarations: [ComponentX], schemas: [NO_ERRORS_SCHEMA] }); });
内容的提问来源于stack exchange,提问作者Hoang Subin
相关产品推荐
相关产品推荐

