微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在大理石测试 Observables 时会出现 3 个额外的帧错误?

如何解决为什么在大理石测试 Observables 时会出现 3 个额外的帧错误?

我正在测试以下 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$,dependencies);
      expectObservable(output$).toBe('---b',actionValues);

登录失败

      const actionInput$ = hot('-a',null);

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

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

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

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。