0
私はそれに正規の 'javascript関数が含まれていることをテストすることができます。ここでRedux Saga:redux-saga-test-planとjestを使用して私の佐賀の中でプレーンなjavascript関数をテストする
は私のサガです:
export function* watchGetActivities() {
yield takeLatest(actionTypes.GET_ACTIVITIES, getActivitiesSaga);
}
function* getActivitiesSaga() {
try {
const activities = yield call(api.getActivities);
const timezone= yield call(getTimezone);
const activityWithTimezone=attachTimeZoneToActivities(activities.data,timezone.data);
yield put(getActivitesSuccess(activityWithTimezone));
} catch (e) {
yield put(getActivitiesFailure());
yield put(showModal(modalTypes.ERROR, 'Could not retrieve activities.'));
}
}
第三のconstは、(これは本質的なAPIから取得した活動をループし、それらを結合)を呼び出すこと機能:
export const attachTimeZoneToActivities= (activities,timezones)=>{
activities.forEach(function (activity) {
activity['timezone']=getActivityTimeZone(timezones,activity.start_epoch_ms)
})
return activities;
}
そして最後に、私のredux-saga-test-planを使用したテスト:
it('fetches activities from the activities API',() => {
const fakeActivity = { data: {foo: 'bar' } };
const fakeTimezone= { data: {timezone: 'denver' } };
const fakeAttachTimeZoneToActivities={foo:'bar',timezone: 'denver'};
return expectSaga(watchGetActivities, api)
.provide([
[call(api.getActivities), fakeActivity],
[call(getTimezone),fakeTimezone],
[matchers.call.fn(attachTimeZoneToActivities), fakeAttachTimeZoneToActivities]
[matchers.call.fn(getActivityTimeZone), 'denver']
])
.put(activity.getActivitesSuccess({ foo: 'bar',timezone:'denver'}))
.dispatch(activity.getActivities())
.silentRun()
});
何らかの理由で、サガイム私はすべてのタイムゾーンのナンセンスにちょうど良いものを追加する前に、私はそれを渡すことができました。誰もが任意のヒントを持っていますか?先進的でありがとう!他
const activityWithTimezone= yield call(attachTimeZoneToActivities, activities.data,timezone.data);
すべてが正常に動作します: