在redux中测试异步动作创建者

时间:2016-12-31 13:30:38

标签: javascript reactjs redux mocha

我有以下动作创建者:

export const doSomething () {
  return (dispatch, getState) => {
    setTimeout(function () {
      dispatch(someAction('bbb'));
    }, 3000);
  }
}

它将状态的某些部分更改为bbb,其中状态是从组合的reducer创建的。我该怎么测试呢?

import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'
it('', function (done) {
  const middlewares = [ thunk ]
  const mockStore = configureMockStore(middlewares)
  const store = mockStore({}) // how should the store look like?
  return store.dispatch(someAction('bbb'))
    .then(() => {
      expect(store.getActions()).toEqual(expectedActions)
    })
});

模拟商店应该怎么样?这是正确的apporach吗?我该如何测试?

1 个答案:

答案 0 :(得分:0)

我认为你试图在一次测试中测试太多,甚至更多,你试图测试你不应该测试的部分(例如存储/发送)。

有一个原因叫它“单元测试”

我会把它改成两个测试:

  1. reducer应该是一个纯函数,给定一个输入它应该返回一个输出(暂时忘记状态),这里只需确保reducer已将值插入到正确的位置。

  2. 动作,为调度函数创建一个间谍,并由你自己提供给动作结果函数(myAction()),并使用expect(dispatchSpy).toHaveBeenCalledWith。你也可以轻松创建getState函数:

    const getState = () => ({ obj1: 5, obj2: "333"})