Aby uzyskać 100% pokrycia moich plików Saga, zastanawiam się, jak przetestować obserwatorów.Jaki jest sens testowania redux-saga jednostki?
byłem googling wokół, istnieje kilka odpowiedzi, w jaki sposób przetestować obserwatorów. To znaczy, saga, która robi takeEvery
lub.
Jednak wszystkie metody testowania wydają się zasadniczo skopiować implementację. Jaki jest sens pisania testu, jeśli jest taki sam?
Przykład:
// saga.js
import { delay } from 'redux-saga'
import { takeEvery, call, put } from 'redux-saga/effects'
import { FETCH_RESULTS, FETCH_COMPLETE } from './actions'
import mockResults from './tests/results.mock'
export function* fetchResults() {
yield call(delay, 1000)
yield put({ type: FETCH_COMPLETE, mockResults })
}
export function* watchFetchResults() {
yield takeEvery(FETCH_RESULTS, fetchResults)
}
Metoda badawcza 1:
import { takeEvery } from 'redux-saga/effects'
import { watchFetchResults, fetchResults } from '../sagas'
import { FETCH_RESULTS } from '../actions'
describe('watchFetchResults()',() => {
const gen = watchFetchResults()
// exactly the same as implementation
const expected = takeEvery(FETCH_RESULTS, fetchResults)
const actual = gen.next().value
it('Should fire on FETCH_RESULTS',() => {
expect(actual).toEqual(expected)
})
})
metoda Test 2: z pomocnika, jak Redux Saga Test Plan
To inny sposób pisania, ale znowu robimy w zasadzie takie same jako wdrożenie.
import testSaga from 'redux-saga-test-plan'
import { watchFetchResults, fetchResults } from '../sagas'
import { FETCH_RESULTS } from '../actions'
it('fire on FETCH_RESULTS',() => {
testSaga(watchFetchResults)
.next()
.takeEvery(FETCH_RESULTS, fetchResults)
.finish()
.isDone()
})
Zamiast Chciałbym po prostu wiedzieć, czy watchFestchResults
trwa co FETCH_RESULTS. Lub nawet tylko wtedy, gdy odpali takeEvery()
. Bez względu na to, jak to nastąpi.
Czy to naprawdę jest sposób na zrobienie tego?
Tak, jestem zaskoczony tym, też. Przykładowe testy porównują wyniki z twórcami efektów sagi. Nie o to mi chodzi. Dbam o to, czy postawią sklep w dobrym stanie. Testowanie za pomocą przykładów wydaje się bardzo kruche i niczego nie dowodzi. –