2017-08-14 14 views
0

私はそれに正規の 'javascript関数が含まれていることをテストすることができます。ここでRedux Saga:redux-saga-test-planとjestを使用して私の佐賀の中でプレーンな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は、(これは本質的な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() 
}); 

何らかの理由で、サガイム私はすべてのタイムゾーンのナンセンスにちょうど良いものを追加する前に、私はそれを渡すことができました。誰もが任意のヒントを持っていますか?先進的でありがとう!他

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

すべてが正常に動作します:

答えて

0

問題は、私はそれがそうのように呼ばれるように必要な第三のconstのためのように、サガの関数は佐賀エフェクトを使用して呼び出される必要があることを忘れてしまったということでした!

関連する問題