Я пытаюсь проверить каждый сценарий, который могла бы выполнить моя сага, но я не могу сделать, это поведение, которое я хочу. Это довольно просто, у меня есть HTTP-запрос (логин), и я хочу проверить успех и случаи сбоев, издеваясь над моим методом API.
Но, похоже, что call effect
не запускает мою функцию api, я пока не понимаю, как это работает, но я предполагаю, что промежуточное программное обеспечение отвечает за вызов функции, и поскольку я не знаю, t идти, хотя хранилище на моем тесте, я не могу получить результат.
Итак, мой вопрос: как вы можете проверить свою сагу, когда вам нужно отправить различные действия (обычно успех или сбой) рядом с вашим асинхронным вызовом?
Я искал пример, я нашел sagas с успехом и потерпел неудачу, но случай сбоя никогда не тестировался, например, в примере корзины
SAGA.JS
export function* login(action) {
try {
const user = yield call(api.login, action);
return yield put(actions.loginSuccess(user));
} catch(e) {
yield put(actions.loginFail(e));
}
}
export default function* rootAuthenticationSagas() {
yield* takeLatest(LOGIN, login);
}
TEST.JS
describe('login', () => {
context('When it fails', () => {
before('Stub the api', () => {
sinon.stub(api, 'login', () => {
// IT NEVER COMES HERE !
return Promise.reject({ error: 'user not found' });
});
});
it('should return a LOGIN_FAIL action', () => {
const action = {
payload: {
name: 'toto',
password: '123456'
}
};
const generator = login(action);
// THE CALL YIELD
generator.next();
const expectedResult = put({ type: 'LOGIN_FAIL', payload: { error: 'user not found' } });
expect(generator.next().value).to.be.eql(expectedResult); // FAIL BECAUSE I GET A LOGIN_SUCCESS INSTEAD OF A FAIL ONE
});
});
});