reactjs - 如何设置输入值
问题描述
我有一个如下所示的受控形式:
const [credentials, setCredentials] = useState<Credentials>({
username: "",
password: ""
});
const handleChange = (value: string, name: string) => {
setCredentials(cred => ({
...cred,
[name]: value
}));
};
<Form onSubmit={onSubmit} data-testid="login-form">
<Input
value={credentials.username}
name="username"
handleChange={handleChange}
/>
<Input
value={credentials.password}
name="password"
handleChange={handleChange}
/>
<Button disabled={!credentials.username || !credentials.password}>
{buttonText}
</Button>
</Form>
Form
,Input
并且Button
组件不是外部 UI 组件,位于另一个目录中。该Input
组件具有 的data-testid
属性form-input
。
这是我的测试:
it("should call handleSubmit in props when clicked", () => {
render(<LoginForm handleSubmit={handleSubmit} buttonText="button" />);
const btn = screen.getByText("button");
const inputs = screen.queryAllByTestId("form-input");
fireEvent.change(inputs[0], { target: { value: "username" } });
fireEvent.change(inputs[1], { target: { value: "pass" } });
fireEvent.click(btn);
expect(handleSubmit).toHaveBeenCalledWith("username", "pass");
});
onChange
这工作正常,但在每个测试中设置这样的输入(在每个输入上触发一个事件)听起来像是额外的工作。有没有更好的方法,还是我错过了什么?
解决方案
推荐阅读
- java - 无法将 Spring 5 应用程序部署到 Payara
- angular - 角度设置器未使用相同的值调用
- microsoft-teams - 微软团队配置选项卡在浏览器中呈现,但不是原生 macOS 应用程序
- c# - 使用字符串数组作为函数参数
- android - Android:未安装应用程序
- python - 如何让 Python 代码更高效?
- azure - 如何通过 Microsoft Graph API 以编程方式创建 Microsoft MsaAppId 和 MsaAppPassword?
- python - Pandas 滚动数据框以创建集群
- swift - 按国家 ISO 获取 NumberFormatter 货币
- mysql - 如何在 mySQL 表中插入点