NX库单元测试用Jest+Spectator时遭遇NG0201: _HttpClient无提供者错误的排查求助
NX库单元测试用Jest+Spectator时遭遇NG0201: _HttpClient无提供者错误的排查求助
最近我在给NX库写单元测试的时候遇到了个让人头大的问题,折腾了好几种mock方式都没解决,来求助大家!
我的场景是:要测试的SearchService依赖了两个OpenAPI生成的服务(SimpleSearchService和StructuredSearchService),它会调用这两个服务暴露的方法。我用的是Jest+Spectator的组合,但一直报这个错误:
ɵNotFound: NG0201: No provider found for _HttpClient . Source: Standalone[AppSearch]. Path: SearchService -> StructuredSearchService -> _HttpClient.
我的测试代码大概是这样的:
import { createServiceFactory, mockProvider, SpectatorService } from '@ngneat/spectator/jest'; describe('SearchSearch', () => { let spectator: SpectatorService<SearchService>; const createService = createServiceFactory({ service: SearchService, providers: [ provideHttpClient(), // 我觉得这些其实没必要加,因为服务不直接用Http provideHttpClientTesting(), // 方式1:用Spectator的mockProvider mockProvider(SimpleSearchService, { simpleSearch: () => of({ items: [] }), }), mockProvider(StructuredSearchService, { structuredSearch: () => of({ items: [] }), }), // 方式2:我也试过手动写useValue的方式 // { // provide: SimpleSearchService, // useValue: { // simpleSearch: jest.fn().mockReturnValue(of({ items: [] })), // }, // }, // { // provide: StructuredSearchService, // useValue: { // structuredSearch: jest.fn().mockReturnValue(of({ items: [] })), // }, // }, ], // 方式3:用Spectator的mocks数组也不管用 // mocks: [SimpleSearchService, StructuredSearchService], }); });
现在的问题是,不管我用哪种方式mock这两个生成服务,Jest好像完全无视我的配置,反而因为生成服务内部依赖的_HttpClient报错——但我根本不需要真正的Http调用啊,只需要mock这两个服务的方法返回值就行。
我到底漏掉了什么或者哪里考虑不周?
使用的版本信息:
@ngneat/spectator: ^21.0.0jest: ^29.0.0@angular/*: ^20.1.6
内容来源于stack exchange
相关产品推荐
相关产品推荐

