为什么在 marble 测试 Observables 出错时多了 3 个帧?

Why are there 3 additional frames when marble testing Observables that error out?

我正在测试以下 redux-observable 史诗:

export const loginEpic: Epic<LoginActionTypes> = (action$, state$, { ajax }) => action$.pipe(
  filter(isOfType(LOGIN)),
  mergeMap(action => login(action.payload.credentials, ajax).pipe(
    map(ajaxResponseObject => ajaxResponseObject.response as User),
    map(user => loginSuccess(user)),
    catchError((ajaxResponseObject: AjaxResponse) => of(loginFail(ajaxResponseObject.response as NodeJS.ErrnoException)))
  ))
);

我已经编写了两个类似的测试来验证 loginSuccess 和 loginFail 是否正常工作:(我排除了一些模拟操作):

登录成功

      const actionInput$ = hot('-a', actionValues);
      const action$ = new ActionsObservable(actionInput$);

      const state$ = new StateObservable(new BehaviorSubject(null), null);

      const responseInput$ = cold('--a', responseValue);
      const dependencies = { ajax: () => responseInput$ };

      const output$ = loginEpic(action$, state$, dependencies);
      expectObservable(output$).toBe('---b', actionValues);

登录失败

      const actionInput$ = hot('-a', actionValues);
      const action$ = new ActionsObservable(actionInput$);

      const state$ = new StateObservable(new BehaviorSubject(null), null);

      const responseInput$ = cold('--#', undefined, mockResponse);
      const dependencies = { ajax: () => responseInput$ };

      const output$ = loginEpic(action$, state$, dependencies);
      expectObservable(output$).toBe('------b', actionValues);

它们都在工作,但是,测试框架表示它期望比之前的测试多 3 个帧。我不明白为什么。我希望有人能给我解释一下。

不幸的是 TestScheduler 是有状态的,因此您看到的是之前 运行 测试的效果。

我创建了 a fork of your project 每个测试初始化​​一个实例。