Rxjs 可观测史诗中的重复捕获

Rxjs 可观测史诗中的重复捕获,rxjs,sinon,rxjs5,redux-observable,rxjs-dom,Rxjs,Sinon,Rxjs5,Redux Observable,Rxjs Dom,我试图测试rxjs观察器的catch函数,但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(

我试图测试rxjs观察器的catch函数,但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 });
  });
史诗请看

导出函数restorePasswordViEpic(操作$:可观察,存储:存储){
返回动作$
.类型(还原密码)
.switchMap(({user})=>{
存储调度(块加载(真));
可观测回波
AJAX
.post(`${config.host}/auth/restore password`,{user})
.map(()=>setRestorePasswordSuccess(true))
.catch(()=>{
可观察的返回值(setMessage('Se ha producido un error por favor intent de nuevo');
});
});
}

您的
Observable.ajax.post存根需要返回抛出错误的
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 });
});
由于您现有的存根只返回一个错误对象本身(不是抛出错误的可观察对象),因此它应该导致抛出一个未捕获的错误,例如:

Uncaught TypeError: Observable.ajax.post(...).map is not a function

如果您在运行测试时没有看到任何类似的错误,那么您可能会在某个地方默默地吞咽错误,因此需要注意。

您的
Observable.ajax.post
存根需要返回抛出错误的
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 });
});
由于您现有的存根只返回一个错误对象本身(不是抛出错误的可观察对象),因此它应该导致抛出一个未捕获的错误,例如:

Uncaught TypeError: Observable.ajax.post(...).map is not a function

如果您在运行测试时没有看到任何类似的错误,您可能会在某个地方默默地吞咽错误,因此需要注意。

如果多年后有人遇到这种情况,Observable.throw已经过时,您可以使用rxjs
throwError
返回带有sinon存根的Observable。例如
exampleStub.returns(throwError(newerror())@CarolynCommons谢谢!不确定你是否有信誉点来编辑帖子,但如果你有,请随意编辑新模式的答案,这样你就可以获得信用。如果多年后有人遇到这种情况,Observable.throw已经过时,你可以使用rxjs
throwError
返回带有sinon存根的Observable。例如
exampleStub.returns(throwError(newerror())@CarolynCommons谢谢!不确定你是否有信誉点来编辑帖子,但是如果你有,请随意编辑新模式的答案,这样你就可以获得信用。