2017-01-16 5 views
0

Ich habe die folgende super einfache Redux-Saga, die ich mit Jest testen möchte.Testen redux-saga takeEvery

function* nextApi() { 
    yield* takeEvery(
    (action) => !!(action.meta && action.meta.next), 
    nextApiSaga 
) 
} 

Ich habe bei Redux-Sagas-Test-Plan sah, aber das scheint nur Sie Unit-Test-Funktionen zu ermöglichen, die Saga Effect Creators enthalten und scheint nicht Saga Helfer zu unterstützen. Es gibt auch , aber das macht nur einen deepEqual-Effekt und testet die Pfeilfunktion nicht.

Was ich in der Lage bin zu tun, ist vorbei die folgenden zwei Objekte zu takeEvery und sehen, dass nextApiSaga nur im zweiten Fall aufgerufen wird.

+0

Hallo, David. redux-saga-test-plan hat Saga-Helfer schon lange unterstützt. Sie haben möglicherweise die Dokumente zu diesen Themen verfehlt: [Saga Helpers] (http://redux-saga-test-plan.jeremyfairbank.com/unit-testing/saga-helpers.html). – jfairbank

Antwort

1

Ich verließ Sie einen Kommentar redux-Saga-Test-Plan Methoden für Saga Helfer mit, aber man kann takeEvery mit leicht testen. Rufen Sie testSaga mit Ihrer Saga und rufen Sie dann die takeEvery Methode Assertion mit dem Muster (Hinweis ich behalte einen Verweis auf Ihre ursprüngliche anonyme Funktion) und die andere Saga.

const helper = action => !!(action.meta && action.meta.next) 

function* nextApi() { 
    yield* takeEvery(
    helper, 
    nextApiSaga 
) 
} 

testSaga(nextApi).takeEvery(helper, nextApiSaga) 
0

Mit einem anderen Ansatz kam ich auf diese Idee. Nicht sicher, ob es die beste Antwort ist, aber es scheint zu funktionieren. Hinzufügen hier für den Fall, dass jemand anderes das gleiche Problem hat und immer noch für bessere Vorschläge offen ist.

function getTakeEveryFunction(saga) { 
    return saga().next().value.TAKE.pattern 
} 

it('takes actions with meta.next property',() => { 
    const func = getTakeEveryFunction(nextApi) 
    expect(func({ type:'foo' })).toBe(false) 
    expect(func({ type:'foo', meta: { next: 'bar' } })).toBe(true) 
})