摘要:
我试图测试一个侦听其中的本机DOM事件的React组件componentWillMount.
我发现jsdom(@8.4.0)在调度事件和添加事件监听器时没有按预期工作.
我可以提取的最简单的代码:
window.addEventListener('click', () => {
throw new Error("success")
})
const event = new Event('click')
document.dispatchEvent(event)
throw new Error('failure')
Run Code Online (Sandbox Code Playgroud)
这引发了"失败".
语境:
这是我试图测试的组件的提取/简化版本.你可以在Webpackbin上看到它.
import React from 'react'
export default class Example extends React.Component {
constructor() {
super()
this._onDocumentClick = this._onDocumentClick.bind(this)
}
componentWillMount() {
this.setState({ clicked: false })
window.addEventListener('click', this._onDocumentClick)
}
_onDocumentClick() {
const clicked = this.state.clicked || false
this.setState({ clicked: !clicked })
}
render() {
return <p>{JSON.stringify(this.state.clicked)}</p>
}
} …Run Code Online (Sandbox Code Playgroud)