reactjs - react Jest : trigger 'addEventListener' 'message' from tests

标签 reactjs dom jestjs react-testing-library postmessage

我的 React 项目有一些代码监听 message event .

const onMessage = ({ data }) => {
  console.log('On onMessage has been fired');
}

window.addEventListener('message', onMessage);

有谁知道如何从我的测试套件中触发此事件?我已经尝试过诸如 events 之类的库和许多事情,例如

test('Recieves message', async () => {
  //Some setup..

  //trigger the addEventListener('message')
  window.parent.postMessage('Hello', '*');  //doesn't work
  window.postMessage('Hello', '*'); //doesn't work
  const ee = new events.EventEmitter();
  ee.emit('Hello') //doesn't work

  //Some further tests...
})

似乎没有任何效果。请注意我需要小心这个测试,我不会模拟和覆盖所有 addEventListener。我仍然需要核心代码来完成我打算做的事情。我只需要从我的测试中触发或发出消息事件

最佳答案

如果你想创建一个 window.postMessage 事件,你可以利用 fireEvent react-testing-library api。

您的测试代码将如下所示:


import { fireEvent } from '@testing-library/react';


test('Recieves message', async () => {
  // Some setup..

  // trigger the addEventListener('message')
    fireEvent(
      window,
      new MessageEvent("message", { data: { foo: "bar" }, origin: "whatever.com" })
    )

  //Some further tests...
})

关于reactjs - react Jest : trigger 'addEventListener' 'message' from tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68756255/

相关文章:

javascript - 如何使用 JavaScript 更新文本框的背景颜色?

angularjs - DOM Explorer 和 JavaScript 控制台在 Visual Studio 2015 Community 中不工作

typescript - 将 jest 的 expect.extend() 与 TypeScript 的范围限定为单个测试文件

reactjs - 用browserHistory : react替换hashHistory时出错

javascript - 类型错误:targetItem.push 不是函数

javascript - 使用 jquery 添加没有值的单个属性

jestjs - Jest 全局变量示例

reactjs - 使用样式组件更改背景图像

css - 主题风格的组件结合了 Prop 和主题

javascript - 为什么 Node fs.watchFile 使测试无法完成?