Reactjs 如何测试是否<;标签>;未在React.JS中呈现
我试图测试组件是否在代码中呈现,这取决于它是否提供给包装组件。我面临着无法检查它是否存在的问题,因为我想不出在屏幕上找到它的方法Reactjs 如何测试是否<;标签>;未在React.JS中呈现,reactjs,jestjs,tdd,react-testing-library,Reactjs,Jestjs,Tdd,React Testing Library,我试图测试组件是否在代码中呈现,这取决于它是否提供给包装组件。我面临着无法检查它是否存在的问题,因为我想不出在屏幕上找到它的方法 return ( <> <If condition={label?.length > 0}> <label htmlFor={name}> {label} </label> </If> <Fiel
return (
<>
<If condition={label?.length > 0}>
<label htmlFor={name}>
{label}
</label>
</If>
<Field type="text" id={name} name={name} placeholder={placeholder} />
<ErrorMessage name={name} component="small" />
</>
);
返回(
0}>
{label}
);
一种(hack-ey)方法是为
提供“aria-label”(
),然后使用screen.findByLabelText(“customLabel”).not.toBeInTheDocument()
在不直接访问DOM元素的情况下,我可以使用什么来查找它?在您的情况下,您需要两件事:
expect(wait findBy*(…).toBeInTheDocument();
)
此外,还需要模拟父组件/包装组件,并据此进行评估
从:
getBy…:返回查询的匹配节点,并抛出
如果没有匹配的元素或存在多个匹配项,则说明错误
找到(如果需要多个元素,则使用getAllBy)
queryBy…:返回查询的第一个匹配节点,然后返回
如果没有匹配的元素,则为null。这对于断言元素很有用
这是不存在的。如果找到多个匹配项,则抛出错误
(如果可以,则使用queryAllBy)
findBy…:返回一个承诺
它在找到与给定查询匹配的元素时解析。
如果未找到任何元素或多个元素,则拒绝承诺
元素在默认超时1000毫秒后找到。如果你需要
查找多个元素,请使用findAllBy
由于
的存在取决于标签的值,因此我想不出更好的检查方法。但是,在本例中,您可以使用data testid
而不是aria label
属性,以避免添加额外的不必要的aria-*
属性。