Angular 9测试报错NULLINJECTORERROR无NgxSmartModalService提供者如何解决
问题原因
你的ActionService内部注入了NgxSmartModalService作为依赖,在MultiNumberComponent.spec.ts的测试模块配置中,仅声明了ActionService作为provider,没有提供它依赖的NgxSmartModalService,Angular测试运行时无法解析依赖链,因此抛出NullInjectorError。
可行解决方案
- 方案1:直接引入真实的NgxSmartModalService到测试模块
首先在MultiNumberComponent.spec.ts顶部导入依赖:
import { NgxSmartModalService } from 'ngx-smart-modal';
再修改测试模块的providers配置:
providers: [ ActionService, NgxSmartModalService // 新增该行 ]
- 方案2:使用Mock对象替代真实服务(更推荐用于单元测试,避免引入无关依赖的逻辑)
你可以创建模拟对象匹配NgxSmartModalService的调用接口即可,不需要实现具体逻辑:
// 在spec文件顶部定义mock,参数2填入你业务中实际用到的NgxSmartModalService方法名 const mockNgxSmartModalService = jasmine.createSpyObj('NgxSmartModalService', ['open', 'close' /* 按需补充方法名 */]); // 修改测试模块的providers配置 providers: [ ActionService, { provide: NgxSmartModalService, useValue: mockNgxSmartModalService } ]
该方案不会引入NgxSmartModalService自身的其他依赖,测试只会聚焦于MultiNumberComponent和ActionService本身的逻辑,运行速度更快、稳定性更高。
内容的提问来源于stack exchange,提问作者Nirmattha Rao
相关产品推荐
相关产品推荐

