Stub catch redux-observable 史诗
Stub catch on redux-observable epic
我正在尝试测试 rxjs 观察器的 catch 函数,但从未捕获 运行。
test.js
it.only('On fail restore password', () => {
sandbox = sinon.stub(Observable.ajax, 'post').returns(new Error());
store.dispatch(restorePasswordVi('prueba'));
expect(store.getActions()).toInclude({ success: false, type: SET_RESTORE_PASSWORD_SUCCESS });
});
史诗请看https://redux-observable.js.org/
export function restorePasswordViEpic(action$: Observable<Action>, store: Store) {
return action$
.ofType(RESTORE_PASSWORD_VI)
.switchMap(({ user }) => {
store.dispatch(blockLoading(true));
return Observable
.ajax
.post(`${config.host}/auth/restore-password`, { user })
.map(() => setRestorePasswordSuccess(true))
.catch(() => {
return Observable.of(setMessage('Se ha producido un error por favor intente de nuevo.'));
});
});
}
您对 Observable.ajax.post
的存根需要 return 引发错误的 Observable
。
.returns(Observable.throw(new Error()));
总计:
it.only('On fail restore password', () => {
sandbox = sinon.stub(Observable.ajax, 'post').returns(Observable.throw(new Error()));
store.dispatch(restorePasswordVi('prueba'));
expect(store.getActions()).toInclude({ success: false, type: SET_RESTORE_PASSWORD_SUCCESS });
});
由于您现有的存根 return 本身只是一个 Error 对象(不是引发错误的可观察对象),因此它应该导致引发未捕获的错误,例如:
Uncaught TypeError: Observable.ajax.post(...).map is not a function
如果您在 运行 测试时没有看到任何类似的错误,则您可能在某个地方悄悄吞噬了错误,因此需要注意一些事情。
我正在尝试测试 rxjs 观察器的 catch 函数,但从未捕获 运行。
test.js
it.only('On fail restore password', () => {
sandbox = sinon.stub(Observable.ajax, 'post').returns(new Error());
store.dispatch(restorePasswordVi('prueba'));
expect(store.getActions()).toInclude({ success: false, type: SET_RESTORE_PASSWORD_SUCCESS });
});
史诗请看https://redux-observable.js.org/
export function restorePasswordViEpic(action$: Observable<Action>, store: Store) {
return action$
.ofType(RESTORE_PASSWORD_VI)
.switchMap(({ user }) => {
store.dispatch(blockLoading(true));
return Observable
.ajax
.post(`${config.host}/auth/restore-password`, { user })
.map(() => setRestorePasswordSuccess(true))
.catch(() => {
return Observable.of(setMessage('Se ha producido un error por favor intente de nuevo.'));
});
});
}
您对 Observable.ajax.post
的存根需要 return 引发错误的 Observable
。
.returns(Observable.throw(new Error()));
总计:
it.only('On fail restore password', () => {
sandbox = sinon.stub(Observable.ajax, 'post').returns(Observable.throw(new Error()));
store.dispatch(restorePasswordVi('prueba'));
expect(store.getActions()).toInclude({ success: false, type: SET_RESTORE_PASSWORD_SUCCESS });
});
由于您现有的存根 return 本身只是一个 Error 对象(不是引发错误的可观察对象),因此它应该导致引发未捕获的错误,例如:
Uncaught TypeError: Observable.ajax.post(...).map is not a function
如果您在 运行 测试时没有看到任何类似的错误,则您可能在某个地方悄悄吞噬了错误,因此需要注意一些事情。