2016-12-07 8 views
0

Я пытаюсь проверить функцию улова наблюдателя rxjs, но поймать никогда не запускать.Заглушка на редукционном наблюдаемом эпическом

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.')); 
     }); 
    }); 
} 

ответ

3

Ваш раскорчевка из 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 }); 
}); 

Поскольку существующий окурок возвращает просто сам объект Error (не наблюдаемый, что выдает ошибку) она должна быть вызвана неперехваченной ошибка быть выброшена, что-то вроде:

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

Если вы не видите какую-либо ошибку, как, что, когда вы запускаете тест, вы можете иметь что-то глотания ошибки беззвучно где-то, так что-то высматривать.