【问题标题】:react-testing-library getAll and then filter to find an elementreact-testing-library getAll 然后过滤找到一个元素
【发布时间】:2019-03-04 07:59:48
【问题描述】:

我有一个呈现自定义checkboxes 列表的页面。 每个checkbox 看起来像这样。

<div
  className="checkbox"
  role="checkbox"
  onClick={onClick}
  onKeyPress={onKeyPress}
  aria-checked={getState().checked}
  tabIndex={0}
>
  {getState().checked ? (
    <span className="checkbox__icon checkbox__selected">
      <Icon src="/icons/check-box-selected.svg" alt="checkbox selected" />
    </span>
  ) : (
    <span className="checkbox__icon">
      <Icon src="/icons/check-box-empty.svg" alt="checkbox not selected" />
    </span>
  )}
  <span className="checkbox__label">{label}</span>
</div>

我希望能够在测试时找到特定的checkboxcheckboxes 的标签不同(目前使用 span 和键/点击处理程序实现)。

我想测试点击标签时,图像应该改变。

假设用户点击标签为“checkbox1”的checkbox1,图像应该从“复选框选中”变为“复选框未选中”

我在尝试引用具有特定标签的 checkbox 时遇到问题。

如果我执行 getByText("checkbox1") ,它会返回 span 元素,并且我没有引用实际的 checkbox 来断言图像是否已更改。

我现在的解决方法是先getAllByRole,然后是filter(item =&gt; item.textContext === "checkbox1"),然后是queryByAltText

有没有更好的方法来测试这个?

【问题讨论】:

    标签: javascript reactjs react-testing-library


    【解决方案1】:

    好吧,在我看来,最好的方法是为复选框 div 提供一个带有标签 var 的 id 属性,然后执行 getElementByID。

    但是,如果你得到像你说的那样的跨度,你总是可以做.parentElement 并得到复选框 div。

    您也可以在 sapn 上使用.closest("div.checkbox");,它会查找最近的带有类复选框的 div。

    【讨论】:

    • .parentElement 可能会使测试变得脆弱,因为我可以在不为用户更改任何内容的情况下进一步嵌套 span。
    • id 方法或 testid 方法有效,但这是我最后的手段,因为我不想添加一些只是为了测试目的
    • 好吧,你可以使用 .closest("div");同样,它会为您提供最近的 div。
    • .closest 也很脆弱,很容易改变组件的结构,而用户甚至看不到差异。在这种情况下,我不希望我的测试被破坏。
    猜你喜欢
    • 2021-04-07
    • 2019-03-30
    • 2022-08-06
    • 1970-01-01
    • 2019-07-02
    • 2021-02-10
    • 2021-06-02
    • 2020-07-21
    • 2022-08-10
    相关资源
    最近更新 更多