【发布时间】:2016-11-14 05:39:42
【问题描述】:
我正在使用酶/摩卡来测试我的反应成分。
我有一个正在测试的父组件。
let wrapper = mount(<Parent />);
这个父组件在它的渲染函数中有一个子组件
render: function() {
<Child onChange={this.foo} />
},
foo: function() {
console.log("I was called");
}
我希望孩子的 onChange 函数触发,以便我可以测试我父母的 foo 函数。
到目前为止,我还没有找到任何方法来做到这一点 - 我已经阅读了关于 sinon 和 stubing 的内容,但这主要是关于拦截函数而不是触发它们。
下面的测试
shallow(<Parent />).instance().foo();
是一个弱测试,因为它不测试连接我的孩子和父母的代码行,并且如果我没有为我的孩子编写单元测试,它也不会测试孩子的 onChange 功能。恕我直言 - 如果将我的组件分解给父母/孩子意味着更少的可测试性 - 那么这个框架有问题
任何帮助将不胜感激,谢谢
【问题讨论】:
-
如果你在父测试中测试
foo()方法,并且在子测试中孩子触发props.onChange()(使用sinon.spy())的能力,那么IMO你不需要测试鉴于孩子调用props.onChange,React 可以调用this.foo。就像您不需要测试 React 在状态更改时调用render()或在 props 更改时调用componentWillReceiveProps()一样。