【发布时间】:2018-11-04 01:25:18
【问题描述】:
我想测试一些与我的列表组件的基本 UI 交互。
我想测试给定的“全选”复选框是否有效,使用 Enzyme+Jest 和浅根对象。
事先,我确认没有选择任何内容。这确实很好用:
const allBox = list.find('Checkbox.select-all')
expect(allBox.prop('checked')).toBe(false)
mainRows.find('Checkbox').forEach( (node) => {
expect(node.prop('checked')).toBe(false)
})
但我无法在该主复选框上触发“点击”(或“更改”)……
allBox.simulate('click')`
我怀疑,因为 Checkbox 仍然是肤浅的 <Checkbox> 而不是真正的 html 风格的 <input type='checkbox'…>。
但是我能做什么呢?
安装(实际渲染)整个列表组件将变得非常庞大。我可以以某种方式安装(相当小的)复选框子组件,然后触发它的事件吗?和/或我需要.dive()吗?
expect()ing 之前还有什么其他东西现在都被选中了吗?
各种<Checkbox> 的checked 属性与组件状态相关联。那我需要list.instance().update()吗?甚至.forceUpdate()? → 有some discussion on the Enzyme tracker,关于.update() 是否/如何工作……
无论如何,我运气不好:
Expected value to be: true
Received: false
180 | allBox.simulate('change')
181 | list.instance().forceUpdate()
182 |
> 183 | expect(allBox.prop('checked')).toBe(true)
184 | // verify, that did the job:
185 | mainRows.find('Checkbox').forEach( (node) => {
186 | expect(node.prop('checked')).toBe(true)
【问题讨论】:
-
这对我有用:在
simulate调用之后再次查询该选择器。像这样:expect(list.find('.select-all').prop('checked')).toBe(true). -
你能分享你浅渲染组件的代码吗?它是否管理复选框的状态?
标签: javascript testing jestjs enzyme