reactjs - react测试库中按标签查询material-ui输入
问题描述
我正在尝试编写一个测试用例,以断言在选择单选选项时禁用数字输入,并且在使用 React 测试库实用程序查询<input>
Material UI 呈现的 HTML 时遇到问题<TextField>
。
此测试适用的组件中有两个<TextField>
实例,因此我尝试使用findAllByLabelText
查询,然后遍历这些节点以确认禁用状态。
反应组件
function OverridePriceModal () {
...
return (
<>
...
<TextField
type="number"
label="Custom Pricing"
value={regularPriceOverride}
onChange={evt => setRegularPriceOverride(evt.target.value)}
disabled={!isRegularPriceOverridden}
/>
...
<TextField
type="number"
label="Custom Pricing"
value={specialPriceOverride}
onChange={evt => setSpecialPriceOverride(evt.target.value)}
disabled={!isSpecialPriceOverridden}
/>
...
</>
);
}
单元测试
test('custom price inputs are disabled while following system pricing', async () => {
render(<OverridePriceModal />);
const priceInputs = await screen.findAllByLabelText('Custom Pricing');
_.forEach(priceInputs, input => {
expect(input).toBeDisabled();
});
});
预期成绩
我希望输入节点可以通过标签文本找到,并被禁用,从而通过测试。
实际结果
我在测试输出中收到以下错误消息:
找到一个带有以下文本的标签:自定义定价,但是没有找到与该标签关联的表单控件。确保您正确使用了“for”属性或“aria-labelledby”属性。
解决方案
好吧,显然我所要做的就是将堆栈溢出用作橡皮鸭,因为我立即弄清楚了......
解决方案
只需将id
道具添加到<TextField>
.
除非您提供道具,否则MUI中的label
and不会与属性正确链接,如MUI TextField docs的Accessibility部分所述。input
TextField
for
id
也许单元测试毕竟会迫使我采取最佳实践..
推荐阅读
- firebase - firebase 托管 - 在 iframe 中显示不正确的内容
- reactjs - Mxgraph Reactjs 不导入 mxgraph 库
- python - 从以标题为键的列创建字典,没有列表格式
- php - php datetime 与我保存的数据库数据不匹配
- ruby - 将时间段拆分为多个时间段
- angular - 单击模式内的按钮后更改父组件中按钮的名称(Angular 7)
- sorting - 如何根据路径/级别对 URL 进行排序?
- r - 计算 36 个元素的向量的 N 个随机排列
- vxworks - 什么可能导致 vxworks 和 windows 互相忽略
- c# - 尝试在 docker 管道(Linux)中生成测试覆盖率时在“未指定报告文件”中运行