私はRedux Sagasのドキュメントに従ってテストを作成しましたが、それは私には非常に脆弱に見えます。私のサガでロジックを更新するたびに、テストは失敗します。これは私の頭の中で警鐘を発し、私が何か間違っていると思うように導く。ユニットテストRedux Sagas
ここでは、ユーザーのプロファイルをロードし、Reduxの状態でそれを保存するためのAPIと通信の例のサガです:
export function* userAuthCheck() {
try {
yield put({ type: START_HTTP });
const me = yield apply(user, user.me);
const organisations = yield apply(user, user.organisations, [me.body.data.id]);
yield put({
type: USER_AUTH_SUCCESS,
redirect: true,
state: {
account: me.body.data,
organisations: organisations.body.data,
},
});
} catch (error) {
yield put({ type: USER_AUTH_REFRESH });
} finally {
yield put({ type: COMPLETE_HTTP });
}
}
は、ここで対応するテストです:
it('can successfully call the API',() => {
const generator = userAuthCheck();
expect(generator.next().value).toEqual(put({ type: START_HTTP }));
expect(generator.next().value).toEqual(call(user.me));
expect(generator.next().value).toEqual(put({
type: USER_AUTH_SUCCESS,
state: { user: undefined },
}));
expect(generator.next().value).toEqual(put({ type: COMPLETE_HTTP }));
});
あなたがいることに気づくかもしれません私はサガを最近更新して以来、私はそれを更新していないので、テストが実際に失敗するでしょう。これは思考の道筋で私を始めたものです。
私のサガをテストする良い方法はありますか?それらを最初から最後まで実行し、異なるAPIレスポンスを模倣し、適切なものが状態にディスパッチされることを主張しますか? https://redux-saga.github.io/redux-saga/docs/introduction/BeginnerTutorial.html
これはおそらく助けになるかもしれません:https://github.com/jfairbank/redux-saga-test-plan – jkrnak
私は 'next()'でかなり簡単に応答をシミュレートできるようですが、私はまだ必要です私がサガを変更するたびにテストを更新します。おそらく、ジェネレータ関数と 'yield'を使うときは避けられません。 – edcs