我尝试做一个测试,在更改输入时,我必须读取useMemo并更改按钮的disabled,userEvent没有进行此更改,有人经历过此过程吗?
我将把我的部分源代码放在这里,组件和测试脚本所在的位置。
<>
<input
data-testid="ipt-email"
value={form.email}
onChange={(e) => {
setForm({ ...form, email: e.target.value });
}}
/>
<button data-testid="submit-sendUser" disabled={isDisabled}>
OK
</button>
</>
这是我的钩子
const isDisabled = useMemo(() => {
const { email } = form;
if (!email.length) return true
return false;
}, [form]);
紧接着是我的单元测试,在这里我写入输入并等待状态改变
从“@测试库/用户事件”导入用户事件;
it("Should enable button when form is valid", async () => {
const wrapper = render(<MyComponent />);
const getEmail = wrapper.getByTestId("ipt-name");
await userEvent.type(getEmail, 'example@example.com');
const getBtnSubmit = wrapper.getByTestId("submit-sendUser");
console.log(wrapper.container.innerHTML);
expect(getBtnSubmit).not.toBeDisabled();
});
我无法使输入更改反映在按钮挂钩中
3条答案
按热度按时间cvxl0en21#
fireEvents和强制移动到“下一帧”的组合对我很有效
ogq8wdun2#
需要等待操作后发生更改
在应用于useEffect的处理程序中移动代码,但我觉得在处理程序中处理验证更好。
希望能有所帮助
5uzkadbs3#
在常量getEmail中,您会得到一个data-testid ='ipt-name'而不是'ipt-email'的组件。
我的测试:
我组件: