为测试创建不同的商店是不对的吗?

时间:2017-01-09 17:55:36

标签: javascript reactjs react-native redux jestjs

我想创建sagas + reducers + actions的集成测试,但是我可以看到有关测试redux的所有文档都使用了redux-mock-store函数。

import configureMockStore from 'redux-mock-store'

有人可以解释为什么会这样,为什么不只是使用完整的商店?

由于

1 个答案:

答案 0 :(得分:2)

如果此对象是仅为测试目的而创建的Redux存储的副本,则 错误创建完整的redux存储区以进行测试。如果您创建的模拟商店不是redux商店的准确副本,那将会出现什么问题。

redux-mock-store的主要优点是可以更轻松地测试异步Redux操作和中间件。

正如丹·阿布拉莫夫(Dan Abramov)所说,关于测试称为api的异步redux动作的主题 -

  

对于使用Redux Thunk或其他中间件的异步操作创建者,它是   最好完全模拟Redux商店进行测试。你仍然可以使用   applyMiddleware()with mock store,如下所示(你可以找到   以下代码在redux-mock-store中)。你也可以使用nock来模拟   HTTP请求。

图书馆的一个非常有用的部分api能够获得已发送的一系列历史行动。

  

store.getActions()=> actions:数组

这对于测试将在一段时间内调度多个操作的异步操作特别有用。

从文档中取得的一个例子:

// Test example with mocha and expect 
it('should dispatch action', () => {
  const initialState = {}
  const addTodo = { type: 'ADD_TODO' }

  const store = mockStore(initialState)
  store.dispatch(addTodo)

  const actions = store.getActions()

  expect(actions).toEqual([addTodo])
});