Angular Spectator测试:组件级服务Mock失效,获取到全局实例的问题
解决Spectator测试中组件级别服务Mock失效的问题
问题核心在于:组件元数据里已声明providers: [MyService],Angular会为该组件创建独立注入器并实例化真实的MyService。你在createComponentFactory的全局providers中添加的mock属于根注入器级别,优先级低于组件自身注入器的配置,所以最终获取到的是组件创建的真实服务实例,而非定义的mock。
解决方式是直接覆盖组件自身的providers配置,通过Spectator的overrideComponents选项实现:
const createComponent = createComponentFactory({ component: MyComponent, overrideComponents: [ { component: MyComponent, override: { providers: [mockProvider(MyService)] } } ], // 其他测试配置... });
配置完成后,组件注入器会使用mock版本的MyService,此时可正常对mock实例进行操作:
const spectator = createComponent(); const myService = spectator.inject(MyService); // 示例:Mock服务方法的返回值 spyOn(myService, 'targetMethod').and.returnValue('mockData'); // 或使用Jest语法 jest.spyOn(myService, 'targetMethod').mockReturnValue('mockData');
内容的提问来源于stack exchange,提问作者Francesco Borzi
相关产品推荐
相关产品推荐

