我正在尝试弄清楚如何测试我的saga,其中包含一个常规的ol‘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调用的函数(这实质上是遍历从apis检索到的活动并将它们组合在一起):
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调用失败,在我添加所有时区的废话之前,我可以让它通过。有人有什么建议吗?非常感谢您的支持!
发布于 2017-08-15 04:11:12
问题是我忘记了sagas中的函数需要使用saga效果来调用,所以对于第三个const,它需要这样调用:
const activityWithTimezone= yield call(attachTimeZoneToActivities, activities.data,timezone.data);其他一切都能正常工作!
https://stackoverflow.com/questions/45680771
复制相似问题