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

如何使用NgMocks为同一方法模拟不同输入与返回值?

解决ng-mocks模拟Store.select根据不同选择器返回不同结果的问题

你可以通过给MockInstance的回调函数传入参数,判断当前调用select时传入的选择器,从而返回对应的Observable。具体实现如下:

MockInstance(Store, 'select', (selector: any) => {
  if (selector === SomeState.someId) {
    return of('some-id');
  }
  if (selector === SomeOtherState.someOtherElement) {
    return of({ /* 这里填入someOtherElement的模拟数据 */ });
  }
  // 可选:处理其他未匹配的调用场景,比如返回空Observable或抛出错误
  return of(null);
});

补充说明

  • 核心逻辑是利用MockInstance的回调能接收原方法的参数,通过对比选择器的引用(NgRx选择器通常是单例函数,引用一致)区分不同调用场景。
  • 若选择器是动态生成的(比如嵌套的createSelector),要确保测试环境导入的选择器和被测试服务中使用的是同一个实例,否则引用对比会失效。
  • 也可以结合测试框架(Jasmine/Jest)的匹配器做更灵活的判断,比如通过函数名称区分,但引用对比是最直接可靠的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:24:30