sta*_*ser 9 reactjs react-testing-library
我有这样的 HTML 代码:
<label class="switch" value="true">
<input name="source" type="checkbox"/>
</label>
Run Code Online (Sandbox Code Playgroud)
如何访问带有名称的输入source?我尝试过使用getByRoleandname属性,但它会抛出一个错误,表明该输入有name="".
以下是尝试过的解决方案,不起作用:
screen.getByRole('checkbox', { name: 'source' });
Run Code Online (Sandbox Code Playgroud)
如何以其他方式访问此输入元素?
我尝试按照提供的解决方案这样做
const elem = document.querySelector(
`input[name="source"]`);
if (elem) {
userEvent.click(elem);
}
Run Code Online (Sandbox Code Playgroud)
这可行,但如果我像这样删除 if 语句
const elem = document.querySelector(
`input[name="source"]`);
userEvent.click(elem);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
null 类型的参数| 元素不可分配给“targetelement”类型的参数。null 类型不可分配给 targetelement 类型
jul*_*ves 10
TL;DR:虽然您可以使用该
container.querySelector方法,但推荐的惯用方法是使用 RTL 的内置查询。
name查询中的选项是*ByRole指元素的可访问名称name,而不是其属性的值。请参阅react-testing-library 中的 name 选项是什么?了解详细信息和参考。
鉴于inputHTML 中的元素没有可访问的名称,访问它的唯一方法就是不在查询中包含任何选项getByRole。
screen.getByRole('checkbox');
Run Code Online (Sandbox Code Playgroud)
但是,如果您想使用该name选项,您首先必须为其添加一个实际的可访问名称。在您的情况下,这可以通过使用现有元素来完成label。
<label class="switch" value="true">
Source
<input name="source" type="checkbox"/>
</label>
Run Code Online (Sandbox Code Playgroud)
input这将允许您使用该选项以您尝试的方式进行查询name。
screen.getByRole('checkbox', { name: 'Source' });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15290 次 |
| 最近记录: |