Jest + Enzyme + React iframe加载事件未触发

时间:2019-07-25 18:34:58

标签: reactjs jestjs enzyme

我有以下(被截断的)组件

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

0 个答案:

没有答案