You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.0
  • jest: ^29.0.0
  • @angular/*: ^20.1.6

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:12:58