我有以下(被截断的)组件
class WindowFrame extends React.Component {
constructor (props) {
super(props)
this._iframe = null
this.setIFrameRef = element => { this._iframe = element }
this.handleLoad = this.handleLoad.bind(this)
}
componentDidMount () {
window.addEventListener('message', this.handleReceiveMessage)
this._iframe.addEventListener('load', this.handleLoad)
}
handleLoad () {
const { onLoad } = this.props
if (onLoad) {
onLoad()
}
this.sendMessage(this.props.postMessageData)
}
render () {
const { attributes } = this.props
return <iframe ref={this.setIFrameRef} {...attributes} />
}
}
我正在尝试测试。我的问题是onload事件似乎没有触发
describe('<WindowFrame/>', () => {
let container
const events = { onLoad: jest.fn(), onReceiveMessage: jest.fn() }
beforeEach(() => {
container = document.createElement('div')
document.body.appendChild(container)
})
afterEach(() => {
document.body.removeChild(container)
container = null
})
it('should call onload', ()=> {
const wrapper = mount(<WindowFrame attributes={{ src: 'about:blank' }}
onLoad={events.onLoad}
onReceiveMessage={events.onReceiveMessage}
serializeMessage={false}
targetOrigin={'*'}/>, { attachTo: container })
const iframe = wrapper.find('iframe').instance()
expect(events.onLoad).toHaveBeenCalled()
})
})
我尝试等待,触发“ wrapper.update()”,设置道具“ wrapper.setProps(...)”。但是到目前为止,似乎没有任何东西可以触发iframe的onload事件。
注意:“ componentDidMount”确实被调用。因此,似乎出现了“加载”事件。但是对“ handleLoad”的调用不会触发,这就是为什么不为传入的prop调用模拟的原因。
感谢您的帮助。
反应:16.8.6 开玩笑:24.7.1 酵素:3.10.0