【发布时间】:2016-12-12 22:15:33
【问题描述】:
因此文档建议使用模拟存储,但它只是记录所有操作并且没有连接到任何减速器。我基本上只是想对一个组件进行单元测试,并看到给定一个动作已被调度,它发生了变化——类似于(以最一般的方式描述):
期望(counter.props).to.equal(1)
调度(增量())
期望(counter.props).to.equal(2)
有什么想法吗?谢谢
【问题讨论】:
标签: unit-testing reactjs redux
因此文档建议使用模拟存储,但它只是记录所有操作并且没有连接到任何减速器。我基本上只是想对一个组件进行单元测试,并看到给定一个动作已被调度,它发生了变化——类似于(以最一般的方式描述):
期望(counter.props).to.equal(1)
调度(增量())
期望(counter.props).to.equal(2)
有什么想法吗?谢谢
【问题讨论】:
标签: unit-testing reactjs redux
这里涉及到几个因素。
首先,即使在正常的渲染和使用中,调度一个动作也不会立即更新组件的道具。 connect 生成的包装器组件在 action 被派发后会立即得到通知,但包装器组件的实际重新渲染通常由 React 批量处理并排队。因此,在一行上调度一个动作不会反映在下一行的 props 中。
其次,理想情况下,“普通”组件实际上不应该对 Redux 本身有任何了解。它只知道它正在获取一些数据作为道具,并且当像按钮点击这样的事件发生时,它会调用一些作为道具提供的函数。因此,测试组件应该独立于测试任何与 Redux 相关的内容。
如果有帮助,我有很多关于 React and Redux-related testing 的文章作为我的 React/Redux links list 的一部分。其中一些文章可能会帮助您提供一些想法。
【讨论】:
connect 的许多测试都是编写测试的足够好的起点。