React 测试库 - 检查按钮禁用属性
React testing library - Check button disabled attribute
好的,所以我有这个输入字段,它需要 at-least
10 个字符,它启用显示 Save & Next
.
的按钮
如果description.length < 10
,它将保持禁用状态。这在 UI 中运行良好。
但是我无法为其编写测试。
test(' Disables the save and next button if description < 10', () => {
render(<StepOne />, { initialState });
const input = screen.getByLabelText(/description/i);
fireEvent.change(input, { target: { value: '123456' } }); // Length < 10
const button = screen.getByText('Save & Next');
console.log(button.innerHTML);
expect(button).toBeDisabled(true);
});
错误:
expect(element).toBeDisabled()
❌ Received element is not disabled:
<span class="MuiButton-label" />
我想知道我在这里遗漏了什么
如果您 debug
,您将看到 MUI 是如何呈现禁用按钮的:
<button
class="MuiButtonBase-root MuiButton-root MuiButton-text Mui-disabled Mui-disabled"
disabled=""
tabindex="-1"
type="button"
>
<span class="MuiButton-label">Save & Next</span>
</button>
因此,您可以使用 .closest
访问 button
:
const button = screen.getByText('Save & Next').closest("button");
expect(button).toBeDisabled();
好的,所以我有这个输入字段,它需要 at-least
10 个字符,它启用显示 Save & Next
.
如果description.length < 10
,它将保持禁用状态。这在 UI 中运行良好。
但是我无法为其编写测试。
test(' Disables the save and next button if description < 10', () => {
render(<StepOne />, { initialState });
const input = screen.getByLabelText(/description/i);
fireEvent.change(input, { target: { value: '123456' } }); // Length < 10
const button = screen.getByText('Save & Next');
console.log(button.innerHTML);
expect(button).toBeDisabled(true);
});
错误:
expect(element).toBeDisabled()
❌ Received element is not disabled:
<span class="MuiButton-label" />
我想知道我在这里遗漏了什么
如果您 debug
,您将看到 MUI 是如何呈现禁用按钮的:
<button
class="MuiButtonBase-root MuiButton-root MuiButton-text Mui-disabled Mui-disabled"
disabled=""
tabindex="-1"
type="button"
>
<span class="MuiButton-label">Save & Next</span>
</button>
因此,您可以使用 .closest
访问 button
:
const button = screen.getByText('Save & Next').closest("button");
expect(button).toBeDisabled();