单元测试 React 的点击外部组件。
单元测试 React 的点击外部组件。
使用来自这个答案的代码来解决组件外部点击问题:
componentDidMount() { document.addEventListener('mousedown', this.handleClickOutside); } componentWillUnmount() { document.removeEventListener('mousedown', this.handleClickOutside); } setWrapperRef(node) { this.wrapperRef = node; } handleClickOutside(event) { if (this.wrapperRef && !this.wrapperRef.contains(event.target)) { this.props.actions.something() // 例如,关闭模态框 } }
我无法弄清楚如何单元测试不快乐的路径,以便不运行警报,我目前的进展:
it('处理组件外部的点击', () => { props = { actions: { something: jest.fn(), } } const wrapper = mount(, ) expect(props.actions.something.mock.calls.length).toBe(0) // 快乐路径应该触发模拟 wrapper.instance().handleClick({ target: 'outside', }) expect(props.actions.something.mock.calls.length).toBe(1) //true // 不快乐的路径不应该在这里触发模拟 ??? expect(props.actions.something.mock.calls.length).toBe(1) })
我尝试过:
- 通过
wrapper.html()
发送 - 通过
.find
一个节点并发送(不模拟event.target
) - 通过
.simulate
在内部元素上模拟click
(不触发事件监听器)
我确定我错过了一些小东西,但我找不到任何示例。