私はサガがたどることができるすべてのシナリオをテストしようとしていますが、私が望む振る舞いをすることはできません。 これはかなりシンプルですが、私はHTTPリクエスト(ログイン)を持っています。私はAPIメソッドを嘲笑して成功と失敗のケースをテストしたいと思います。Redux SagaでAPIリクエストの失敗をテストするにはどうすればよいですか?
しかし、call effect
が私のAPI関数を起動しないように見えますが、実際の動作はまだわかりませんが、ミドルウェアが関数呼び出しを担当していると思います。私のテストで店に行って、私は結果を得ることができません。
私の質問は、非同期呼び出しの隣にあるさまざまなアクション(通常は成功か失敗か)を送信する必要があるときに、どのようにあなたのサガをテストできますか?私は、例えば見
は、私はhere
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
});
});
});