typescript - 为什么在弹珠测试 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$, 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
是,它是有状态的,因此您会看到以前运行的测试的效果。
我已经为您的项目创建了一个分支,它为每个测试初始化一个实例。
推荐阅读
- c# - 是否可以重命名 ASPNETCORE_ENVIRONMENT 变量?
- c - STM32 - Strstr 函数无法按预期工作(UART)
- css - 弹性项目的宽度正在缩小
- c++ - 指向派生类的抽象bass类的shared_ptr向量
- javascript - 阅读更多切换按钮
- typo3 - 更新 Typo3 8.7.31 后 - 后端没有页面树
- r - 根据数据分布寻找合适的聚类方法
- kibana - 将 OpenID 用户添加到 Open Distro Kibana
- android - 如何在颤动的降价中添加超链接到文本
- r - ggplot2 中 annotate() 的默认单位是什么?