2017-08-14 24 views
0

我想弄清楚它是如何測試我的傳奇,它包含一個普通的ol'javascript函數。Redux Saga:在我的英雄傳奇中測試普通的javascript函數,使用了REDX-SAIG-test-plan和jest

這裏是我的傳奇:

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.')); 
    } 
} 

第三常量調用(這基本上是通過從討論的API的活動循環,並將其組合)的功能:

export const attachTimeZoneToActivities= (activities,timezones)=>{ 
    activities.forEach(function (activity) { 
     activity['timezone']=getActivityTimeZone(timezones,activity.start_epoch_ms) 
    }) 
return activities; 
} 

最後,我測試使用REDX-SAGA-測試計劃:

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() 
}); 

無論出於何種原因,傳奇imme如果沒有api通話,我可以在通過時區廢話之前加以通過。任何人有任何提示?先進的謝謝!

回答

0

的問題是,我忘了,在傳奇的功能,需要使用佐賀效應被稱爲所以第三常量,它需要被稱爲像這樣:

const activityWithTimezone= yield call(attachTimeZoneToActivities, activities.data,timezone.data); 

其他一切工作正常!