【问题标题】:React Testing Library getByLabelText doesn't concat multipart aria-labelledbyReact 测试库 getByLabelText 不连接多部分 aria-labelledby
【发布时间】:2020-05-04 15:46:30
【问题描述】:

沿着this MDN article 的行,我有一个由三个不同元素组合标记的复选框输入:一个标签、一个文本字段,然后是另一个标签。

所以复选框输入有一个aria-labelledby 属性,其值类似于label1 text-field label2

<input type="checkbox" aria-labelledby="allow-up-to num words-in-between" />
<div>
  <label id="allow-up-to">allow up to</label>
  <input id="num" type="text" value="0" />
  <label id="words-in-between">words in between</label>
</div>

在我的测试中,我试图根据该标签获取复选框。

我可以使用getByLabelText('text of label1')getByLabelText('text of label2') 成功获取输入,但是给它提供完整的串联标签getByLabelText('text of label1 value of text-field text of label2') 会导致找不到任何东西。

getByLabelText("allow up to"); // works
getByLabelText("words in between") // works
getByLabelText("allow up to 0 words in between") // does not work

尝试getByLabelText('value of text-field') 也不起作用,但即使我从aria-labelledby 中删除文本字段,我仍然无法使用getByLabelText('text of label1 text of label2') 获取输入。 Here's a codesandbox 带有我正在尝试测试的实际 UI 的简化版本。

getByLabelText 是否应该以这种方式工作(即使根据 MDN 文章,aria-labelledby 中的多个标签应该由屏幕阅读器连接)?如果是这样,是否有另一种方法可以通过完整标签文本获取输入?

【问题讨论】:

    标签: react-testing-library


    【解决方案1】:

    我能够让它与 getByRole 查询一起使用。

    test('gets by complete label', () => {
      const { getByRole } = render(<AllowedWordsBetween />);
      const checkbox = getByRole('checkbox', {
        name: 'allow up to 0 words in between',
      });
      expect(checkbox).toBeInTheDocument();
    });
    

    这可能是getByLabelText 查询的问题,但我还不确定。


    2020 年 11 月编辑

    问题was fixed并包含在版本7.21.2

    【讨论】:

    • 谢谢,这对我的用例很有用!我可能会提交一个关于getByLabelText 行为的错误,以尝试弄清楚这是否是有意的,但getByRole 现在可以正常工作。
    • 完美!请务必在此处链接问题以将其记录在案。如果它是一个真正的问题,我也可能会继续修复它。我在使用 getByRole 时遇到了一些性能问题,所以我现在很少使用它,但它对于像这样的更多边缘情况绝对有用。
    • 这是getByLabelText 行为的问题:github.com/testing-library/dom-testing-library/issues/… 感谢您的提示 :)
    猜你喜欢
    • 2020-10-31
    • 2013-11-06
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多