使用带有mockStore和getState()的thunk测试

时间:2018-10-03 21:58:30

标签: react-native redux react-redux redux-thunk redux-mock-store

我无法使用模拟存储测试thunk。

在重击中,我调用getState()来获取redux存储的状态,然后根据该状态调度操作。

如何获取thunk的getState()调用以检查模拟存储状态,而不是redux存储状态?

    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 :(得分:1)

redux-mock-store不会更新状态,而仅记录传递给分派的动作。

此外,在库中实现getState方法的代码将返回传递的初始状态或函数。

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

根据文档:

  

请注意,该库旨在测试与动作相关的逻辑,而不是与减速器相关的逻辑。换句话说,它不会更新Redux存储。    如果您想要将动作和减速器结合在一起的复杂测试,   看一下其他库(例如redux-actions-assertions)。参考   发出#71以获得更多详细信息。

您可以尝试使用另一个库,通过将操作手动传递给reducer来遵循#71中的建议,以获取所需的更新状态,或者修改规范以验证saveAndSendTask中分配的操作使用预期的先前状态初始化mockStore。