【发布时间】:2017-07-19 09:37:24
【问题描述】:
我有一个设置 props 的测试,以观察组件的一些变化。唯一的复杂之处是我将渲染的元素包装在 <Provider> 中,因为在树的下方还有一些连接的组件。
我正在通过渲染
const el = () => <MyComponent prop1={ prop1 } />;
const wrapper = mount(<Provider store={store}>{ el() }</Provider>);
然后我尝试使用以下方法观察一些变化:
wrapper.setProps({ /* new props */ });
// expect()s etc.
问题是setProps() 没有在包装的组件上正确设置道具。我认为这是因为 <Provider> 实际上并没有传递道具,因为它不是 HoC。除了更改本地范围的 prop 变量并重新渲染之外,还有更好的测试方法吗?
【问题讨论】:
-
现在,我通过
mount(el, { context, childContextTypes })传递上下文而不是用<Provider>包装解决了问题(尽管不是问题)。 -
我也有同样的问题。我希望看到您的解决方案使用 childContextTypes 为您工作。你介意分享代码吗?
-
基本上你只需要在上下文中设置商店,例如使用
redux-mock-store。即mount(el, { context: { store }, childContextTypes: { store: PropTypes.object.isRequired }});. -
非常感谢@GTF 的回复。后来,我能够使用 context 和 childContextTypes 在互联网上关注其他示例。和你现在描述的一样。太棒了!
标签: reactjs testing redux react-redux