Тестирование Thunk с использованием mockStore с getState () - PullRequest
0 голосов
/ 04 октября 2018

У меня проблемы с тестированием thunk с помощью mock-store.

В моем thunk я вызываю getState (), чтобы получить состояние хранилища с избыточностью, а затем отправляю действия на основе состояния.

Как мне получить вызов thSnks getState () для проверки состояния фиктивных хранилищ, а не состояния хранилища с избыточностью?

    import {initialState} from '../configureStore'
    import {saveAndSendTask} from '../thunks/queueThunk'
    import configureMockStore from 'redux-mock-store'
    import thunk from 'redux-thunk'
    import * as actions from '../actions/index'

    const middlewares = [thunk]
    const mockStore = configureMockStore(middlewares)

    describe('Testing TaskQueue Thunk', () => {
        const store = mockStore(initialState)

        test('Test TaskQueue thunk sends to sever and removes from queue.', () => {
            // removed variables test data for the sake of brevity.

            // Add actions to Mock Store and set up Base state needed to test.
            store.dispatch(actions.addToTaskQueue(task1))
            store.dispatch(actions.addToTaskQueue(task2))
            store.dispatch(actions.setTasks([task1, task2, task3]))
            store.dispatch(actions.selectTask(task3.id))
            store.dispatch(actions.isConnected(true))

            // This is the thunk I want to test.
            store.dispatch(saveAndSendTask())

            expect('something').toEqual('something')
        })
    )}

Вот блок, который я хочу проверить.

    export const saveAndSendTask = (): any => {
      return (dispatch: Dispatch, getState) => {

        // This state is the same as initial state of redux store. Ignores Mock store state.
        console.log(getState())

        // Selected task is undefined.
        dispatch(addToTaskQueue(getState().tasks.selectedTask))

        // ....rest of logic.....
      }
    }

1 Ответ

0 голосов
/ 04 октября 2018

redux-mock-store не обновляет состояние, а только записывает действия, переданные диспетчеру.

Кроме того, код, реализующий метод getState в библиотеке, либо возвращает переданное начальное состояние, либо функцию.

getState () {
  return isFunction(getState) ? getState(actions) : getState
}

Согласно документации:

Обратите внимание, что эта библиотека предназначена для проверки логики, связанной с действием, а не логики, связанной с редуктором.Другими словами, он не обновляет магазин Redux.Если вам нужен сложный тест, объединяющий действия и редукторы, взгляните на другие библиотеки (например, redux-actions-assertions).Подробнее см. В выпуске # 71 .

Вы можете попробовать другую библиотеку, следуя рекомендациям, указанным в # 71, передавая действия вашему редуктору вручную, чтобы получить обновленную информацию.укажите, что вы ожидаете, или измените вашу спецификацию, чтобы проверить действие, отправленное в saveAndSendTask, используя ожидаемое предыдущее состояние для инициализации вашего mockStore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...