【问题标题】:How to fire onChange event on custom components using react-testing-library?如何使用 react-testing-library 在自定义组件上触发 onChange 事件?
【发布时间】:2019-02-01 16:39:38
【问题描述】:

我正在使用这个组件:

<AceEditor
  value={data}
  className="code-editor"
  mode="json"
  theme="dracula"
  onChange={setData}
  name="data"
  height="320px"
  width="100%"
  editorProps={{ $blockScrolling: true }}
  showPrintMargin={false}
  highlightActiveLine={false}
/>

那么,如何使用 react-testing-library 获取此组件并触发 onChange 事件?我试图找到一些类似 getByComponentName 或类似的功能,但没有成功。

【问题讨论】:

  • 需要更多信息,如果你正在使用 react-ace,github.com/securingsincity/react-ace。声明一个函数并在onChange上调用它
  • 好的@SaahithyanVigneswaran,但我怎样才能在规范上触发这个功能?

标签: javascript reactjs react-testing-library


【解决方案1】:

在 RTL 中,你并没有真正做到这一点。

建议的方法是模拟用户会做什么。例如,如果AceEditor 呈现textarea,您可以使用fireEvent.change 来模拟用户打字。此时,您的组件将触发 onChange 事件并像在生产中一样做出反应。

某些第 3 方组件可能难以使用这种方法进行测试,因为它们具有您无法控制的内部结构。在这些情况下,我建议只是模拟它们。最后,它们已经被维护者测试过了。

在您的情况下,您可以使用 jest.mock 并呈现 textarea 而不是您的编辑器。

【讨论】:

  • 这真的有效吗?我无法模拟 AceEditor,因为当我模拟 AceEditor 时,它会覆盖所有 ace-builds 导入,有人可以帮我解决这个问题吗?或者你有任何文章如何用 textarea 模拟 AceEditor?
猜你喜欢
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2021-06-10
  • 2019-07-09
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
相关资源
最近更新 更多