【发布时间】:2018-01-22 15:52:20
【问题描述】:
我试图弄清楚我是如何测试包含常规 ol' javascript 函数的 saga 的。
这是我的传奇:
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()
});
无论出于何种原因,传奇故事立即导致 api 调用失败,我可以在添加所有时区废话之前让它通过。有人有任何提示吗?提前谢谢你!
【问题讨论】:
标签: redux jestjs redux-saga redux-saga-test-plan