为什么在 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 每个测试初始化一个实例。
我正在测试以下 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 每个测试初始化一个实例。