Модульное тестирование Redux-Saga Select - PullRequest
2 голосов
/ 17 июня 2019

У меня есть простая сага этого вида:

const getAccountDetails = function * () {
   const { url } = yield select(state => state.appConfig)
   const accountDetails = yield call(apiFetchAccountDetails, url)
}

Я пытаюсь написать модульный тест:

describe('getAccountDetails', () => {
    const iterator = getAccountDetails()
    it("should yield an Effect 'select(state=> state.appConfig)'", () => {
       const effect = iterator.next().value
       const expected = select(state => state.appConfig)
       expect(effect).to.deep.eql(expected)
    })

Этот тест не пройден.Хотя effect и expected очень похожи, они не идентичны.

По крайней мере одно из различий скрыто в payload.selector.scopes, где ожидаемый эффект и ожидаемые следующие:

screen shot

Поскольку объемы этих двух всегда будут разными, как эти тесты могут когда-либо работать?

eta: этот шаблон адаптированиз примера , связанного с документами redux-saga

1 Ответ

2 голосов
/ 17 июня 2019

Трещины после обнаружения этой проблемы с обратного пути.

Исправление состоит в том, чтобы создать именованную функцию для выбора и экспортировать ее из модуля, в котором находится тестируемая сага, а затем использовать эту же функцию в тестах. Все хорошо.

export const selectAppConfig = state => state.appConfig

const getAccountDetails = function * () {
   const { url } = yield select(selectAppConfig)
   const accountDetails = yield call(apiFetchAccountDetails, url)
}
    import {selectAppConfig} from './sagaToTest'

    describe('getAccountDetails', () => {
        const iterator = getAccountDetails()
        it("should yield an Effect 'select(state=> state.appConfig)'", () => {
           const effect = iterator.next().value
           const expected = select(selectAppConfig)
           expect(effect).to.deep.eql(expected)
    })




...