【发布时间】:2015-12-23 05:18:52
【问题描述】:
我经常写这样的组件:
<input
ref="ckbx"
type="checkbox"
checked={this.props.checked}
onChange={() => this.props.onChange(this.refs.ckbx.checked)}
/>
但是,我现在发现这很难进行单元测试。
特别是,当使用Simulate.change 或Simulate.click 时,回调会传递复选框的初始值而不是新值(就像在浏览器中发生的那样)。
当我将 { target: { checked: false } } 添加为每个 Simulate 调用的第二个参数时,此行为仍然存在。
如果我改为使用它会起作用
<input
type="checkbox"
checked={this.props.checked}
onChange={e => this.props.onChange(e.target.checked)}
/>
所以,我的问题是
- 这是编写输入逻辑的首选方式吗?
- 这是编写输入逻辑的唯一可单元测试的方式吗? 它看起来真的没有那么灵活(如果我需要考虑多个 ref 怎么办?)。
- 我可以使用现有方法吗?
- 我应该更换所有组件吗? (不难,但如果有更好的方法,我不想这样做。)
【问题讨论】:
标签: javascript unit-testing reactjs