Redux Saga:使用 redux-saga-test-plan 和 jest 在我的 saga 中测试纯 javascript 函数
Posted
技术标签:
【中文标题】Redux Saga:使用 redux-saga-test-plan 和 jest 在我的 saga 中测试纯 javascript 函数【英文标题】:Redux Saga: Testing plain javascript function inside my saga with redux-saga-test-plan and jest 【发布时间】: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 调用失败,我可以在添加所有时区废话之前让它通过。有人有任何提示吗?提前谢谢你!
【问题讨论】:
【参考方案1】:问题是我忘记了 sagas 中的函数需要使用 saga 效果调用,所以对于第三个 const 需要像这样调用:
const activityWithTimezone= yield call(attachTimeZoneToActivities, activities.data,timezone.data);
其他一切正常!
【讨论】:
以上是关于Redux Saga:使用 redux-saga-test-plan 和 jest 在我的 saga 中测试纯 javascript 函数的主要内容,如果未能解决你的问题,请参考以下文章