首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux Saga:在我的saga中使用redux-saga-test-plan和jest测试普通javascript函数

Redux Saga:在我的saga中使用redux-saga-test-plan和jest测试普通javascript函数
EN

Stack Overflow用户
提问于 2017-08-15 02:29:43
回答 1查看 307关注 0票数 0

我正在尝试弄清楚如何测试我的saga,其中包含一个常规的ol‘javascript函数。

这是我的传奇故事:

代码语言: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检索到的活动并将它们组合在一起):

代码语言:javascript
复制
export const attachTimeZoneToActivities= (activities,timezones)=>{
    activities.forEach(function (activity) {
        activity['timezone']=getActivityTimeZone(timezones,activity.start_epoch_ms)
    })
return activities;
}

最后,我使用redux-saga- test -plan进行测试:

代码语言:javascript
复制
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调用失败,在我添加所有时区的废话之前,我可以让它通过。有人有什么建议吗?非常感谢您的支持!

EN

回答 1

Stack Overflow用户

发布于 2017-08-15 04:11:12

问题是我忘记了sagas中的函数需要使用saga效果来调用,所以对于第三个const,它需要这样调用:

代码语言:javascript
复制
const activityWithTimezone= yield call(attachTimeZoneToActivities, activities.data,timezone.data);

其他一切都能正常工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45680771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档