【问题标题】:Is it wrong to create a different store just for testing?仅仅为了测试而创建不同的商店是错误的吗?
【发布时间】:2017-05-24 01:35:42
【问题描述】:

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

import configureMockStore from 'redux-mock-store'

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

谢谢

【问题讨论】:

  • 因为这些示例用于单元测试。您可能应该进行完整的商店实施以进行集成测试。
  • 真的,谢谢@R.HalukÖngör

标签: javascript reactjs react-native redux jestjs


【解决方案1】:

如果此对象是仅为测试目的而创建的 Redux 存储的副本,那么创建一个完整的 Redux 存储进行测试并没有错误。如果您创建的模拟存储不是 redux 存储的准确副本,则会出现问题。

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

正如 Dan Abramov 关于测试调用 api 的异步 redux 操作的主题所说的那样 -

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

库 api 的一个非常有用的部分,它能够获取已调度的历史操作数组。

store.getActions() => 动作:数组

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

来自文档的示例:

// 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])
});

【讨论】:

  • 感谢您的努力,非常适合我的场景。我认为这是有道理的,但我想听听外部意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 2021-09-11
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多