单元测试NgRx Signal Store时遇NullInjectorError:无Signal Store提供者
问题排查与解决
你遗漏了@ngrx/signals中SignalStore的专用注册方式——测试时不能直接把自定义Store类/实例加到providers数组,得用框架提供的provideSignalStore函数来注册。
具体操作:
- 从
@ngrx/signals导入provideSignalStore - 在TestBed的providers里替换掉直接添加的
EquipmentFiltersItemStore,改成provideSignalStore(EquipmentFiltersItemStore)
示例代码:
import { provideSignalStore } from '@ngrx/signals'; TestBed.configureTestingModule({ declarations: [YourComponentUnderTest], providers: [ provideSignalStore(EquipmentFiltersItemStore), // 其他依赖服务... ] });
原因是:@ngrx/signals的SignalStore内部依赖了一些底层服务(比如SignalStore自身的注入令牌),直接添加Store到providers无法触发这些依赖的注入,而provideSignalStore会自动处理所有必要的依赖注册,确保Store实例能被正确创建和注入。
额外检查点:
- 确认你的
EquipmentFiltersItemStore是用signalStore函数创建的标准Store实例 - 组件中的providers配置是否正确(比如确实是在@Component的providers数组里声明了该Store)
内容的提问来源于stack exchange,提问作者peterc
相关产品推荐
相关产品推荐

