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

如何在Jest测试中动态修改Angular NgRx Facade的configuration$值?

动态修改Mock Facade的configuration$返回值方案

核心思路是把Mock类里固定的of(configObject)换成BehaviorSubject,这样就能在测试用例中随时推送新的配置值。

步骤1:重构MyMockFacade

把configuration$从固定的Observable改成BehaviorSubject的asObservable(),同时提供可操作的入口让测试用例修改值:

class MyMockFacade {
  // 用BehaviorSubject存储配置,初始值设为默认的configObject
  private configurationSubject = new BehaviorSubject<Configuration>(configObject);
  // 对外暴露Observable,保持和原Facade的接口一致
  configuration$ = this.configurationSubject.asObservable();

  // 给测试用例提供更新配置的方法
  setConfiguration(config: Configuration) {
    this.configurationSubject.next(config);
  }
}

步骤2:在测试用例中动态修改

注入Mock类后,通过TestBed.inject获取实例,调用setConfiguration方法更新配置:

describe('Config Effects', () => {
  let myMockFacade: MyMockFacade;
  let effects: ConfigEffects;

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        ConfigEffects,
        { provide: MyFacade, useClass: MyMockFacade },
        // 其他必要依赖(比如EffectsModule、MockStore等)
      ]
    });

    myMockFacade = TestBed.inject(MyFacade) as MyMockFacade;
    effects = TestBed.inject(ConfigEffects);
  });

  it('应该响应新的配置值', (done) => {
    // 推送自定义配置到Mock Facade
    const testConfig = { /* 你的测试配置对象 */ };
    myMockFacade.setConfiguration(testConfig);

    // 验证Effects对新配置的处理逻辑
    effects.targetEffect$.subscribe(result => {
      expect(result).toEqual(/* 预期的action或结果 */);
      done();
    });
  });

  // 可选:每个测试用例后重置配置,避免测试间污染
  afterEach(() => {
    myMockFacade.setConfiguration(configObject);
  });
});

极简方案:直接暴露Subject引用

如果不想给Mock类加额外方法,也可以直接把Subject公开:

class MyMockFacade {
  public configurationSubject = new BehaviorSubject<Configuration>(configObject);
  configuration$ = this.configurationSubject.asObservable();
}

测试用例里直接操作:

myMockFacade.configurationSubject.next(testConfig);

这种方式完全可控,每个测试用例可以独立设置不同的配置值,不会互相干扰。

内容的提问来源于stack exchange,提问作者pitruskjw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:35:05