Я пытаюсь протестировать «наблюдаемую эпопею с редукцией», но тест терпит неудачу, потому что не все действия находятся в store.getActions (), как ни странно, запускается функция store.dispatch.
Эпос и действия
export const VERIFY_SESION = 'auth/VERIFY_SESION';
export const SET_POLICIES_ACCEPTED = 'auth/SET_POLICIES_ACCEPTED';
export const AUTHENTICATE = 'auth/AUTHENTICATE';
export function setPoliciesAccepted(wereAccepted: boolean) {
return {
wereAccepted,
type: SET_POLICIES_ACCEPTED,
};
}
export function verifySesion() {
return {
type: VERIFY_SESION,
};
}
export function authenticate(token) {
return {
token,
type: AUTHENTICATE,
};
}
export function verifySesionEpic(action$, store) {
return action$
.ofType(VERIFY_SESION)
.switchMap(async () => {
try {
store.dispatch(setBlockLoading(true));
const token = await AsyncStorage.getItem('token');
if (token !== null) {
store.dispatch(setBlockLoading(false));
return authenticate(token);
}
const policiesWereAccepted = await AsyncStorage.getItem('policiesWereAccepted');
store.dispatch(setBlockLoading(false));
return setPoliciesAccepted(policiesWereAccepted);
} catch (error) {
return setMessage(error.message);
}
});
}
контрольная работа
describe('actions/auth', () => {
let store;
const asyncStorageGetStub = stub(AsyncStorage, 'getItem');
beforeEach(() => {
store = mockStore();
});
afterEach(() => {
asyncStorageGetStub.restore();
});
it('Should call authenticate if token', () => {
const token = 'mitoken';
asyncStorageGetStub.withArgs('token').returns(Promise.resolve(token));
store.dispatch(verifySesion());
expect(store.getActions()).toContain({ type: AUTHENTICATE, token });
});
});
Результат испытаний
1) "actions / auth Должен вызывать epic для verifySesion: Error: Ожидается [{type: 'auth / VERIFY_SESION'}], чтобы включить {token: 'mitoken', type: 'auth / AUTHENTICATE'}»
Примечание
Я уверен, что условный токен! == null проходит
dispatch
иexpect
syncronous, первым возвращаемым действием будет VERIFY, действие AUTHENTICATE, вероятно, будет добавлено через некоторое время (в зависимости от того, как ваш эпик завершится) - person olsn   schedule 06.01.2017