在 rxjs 中设置时间延迟时,"hot" observable 不起作用

The "hot" observable doesn't work when setting time delay in rxjs

我正在用 ngrx 编写一个单元测试以达到效果,当我 运行 热观察测试对管链上的效果有 delay 时,receive 有空值。

const output = loginSuccess(loginResult);

actions$ = hot('^a', { a: action });
const expected = cold('30ms c', { c: output })

expect(effect.login$).toBeObservable(expected);

我的函数是:

login$ = createEffect(() =>
    this.actions$.pipe(
      ofType(login),
      delay(20),
      map((payload) => loginSuccess({
        data: {
          username: payload.credential.username,
          age: 18,
          name: 'name',
        },
      }))
    )
  );

如果我删除 delay 运算符(并更正测试用例中的时间),它工作正常,我做错了什么?

谢谢!

您需要使用测试调度程序。 有关示例,请参阅 NgRx 文档 - https://ngrx.io/guide/effects/testing#effects-with-parameters

effects.search$({
  scheduler: getTestScheduler(),
});