【问题标题】:Testing Redux combined reducers测试 Redux 组合减速器
【发布时间】:2016-06-18 10:46:30
【问题描述】:

假设我有几个减速器功能,我使用combineReducers(...) 将它们全部组合成一个减速器,有没有办法测试组合减速器实际包含哪些减速器?

例如,如果我有这个:

import { combineReducers } from 'redux'

const reducer1 = (state, action) => {...}
... (more reducers, etc)

const rootReducer = combineReducers({
    reducer1,
    reducer2,
    reducer3
})

export default rootReducer

我可以使用 Mocha 和 Expect.js 编写一个测试,以检查 rootReducer 是否包含 reducer2?这甚至可能吗?

我目前设置项目的方式是,每个减速器都在一个单独的文件中,然后导入到使用combineReducers(...) 函数将它们全部组合起来的文件中。我正在测试所有单个减速器以检查它们是否做了他们应该做的,但我也认为测试组合减速器以确保它包含它应该包含的所有其他减速器是一个好主意(以防我忘记例如添加一个)。

谢谢

【问题讨论】:

  • 它是否更重要如果它包含“reducer2”(无论这意味着什么)还是它与reducer2一样工作?我认为您的测试可能会问错误的问题...另外,查看github.com/reactjs/redux/blob/master/src/combineReducers.js#L93,我没有看到任何参考返回到未组合的减速器(以太finalReducersreducers),所以“不”我想是你的直接回答。它返回的只是一个循环并调用所有个体的函数......
  • 谢谢。您的评论让我想到了减速器的实际作用,并让我意识到它会产生一个状态,其键以传递给 combineReducers 函数的减速器命名,因此我可以测试返回的状态并检查它是否包含键我希望它会。这样我就知道我是否已经通过了所有必需的减速器。

标签: javascript mocha.js redux expect.js


【解决方案1】:

您正在测试错误的 IMO。你应该相信combineReducers() 函数做了它应该做的事情(它应该在 Redux 分发测试中进行测试)。但是您可以创建一个方法,该方法将返回带有减速器的对象以组合起来作为参数传递给combineReducers()。该方法可以而且应该进行测试。

【讨论】:

  • 谢谢。我认为这与我最终的做法类似,尽管我目前正在测试组合减速器生成的状态。不过,您的想法听起来像是一个更好的主意,所以我会尝试这样做,因为如果 Redux 改变了它处理状态的方式,我的测试可能会失败(不太可能,但你永远不知道)。
  • 测试结果状态会使测试变得脆弱,因为每次任何组合减速器或任何“下游”发生变化时都需要更改它。
  • 我现在开始学习,我想知道在 combineReducers() 函数上测试什么。我的减速器分成两部分。第一个是减速器的定义,另一个包含给定减速器的所有动作。两者都已经进行了测试。对我来说只测试 combineReducers 似乎是多余的,对吗?
  • 恕我直言,是的,这是多余的。
猜你喜欢
  • 2016-02-11
  • 2020-07-07
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多