reactjs - @testing-library/react 测试表单 onSubmit
问题描述
在这样一个简单的场景中
function onSubmit() { e.preventDefault(); /* Some Submit Logic */ }
<form data-testid="form" onSubmit={(e) => onSubmit(e)}>
<button type="submit" data-testid="submit-button">Submit</button>
</form>
单击提交按钮时,如何确保表单被提交?
const { queryByTestId } = render(<LoginForm/>);
const LoginForm = queryByTestId("form")
const SubmitButton = queryByTestId("submit-button")
fireEvent.click(SubmitButton)
???
如何测试是否已调用 onSubmit() 或是否已提交表单?
解决方案
基本上,这就是我“解决”的问题:
// LoginForm.js
export function LoginForm({ handleSubmit }) {
const [name, setName] = useState('');
function handleChange(e) {
setName(e.target.value)
}
return (
<form data-testid="form" onSubmit={() => handleSubmit({ name })}>
<input required data-testid="input" type="text" value={name} onChange={(e) => handleChange(e)}/>
<button type="submit" data-testid="submit-button">Submit</button>
</form>
)
}
export default function LoginPage() {
function handleSubmit(e) {
// submit stuff
}
return <LoginForm handleSubmit={(e) => handleSubmit(e)}/>
}
现在测试的文件:
// LoginForm.test.js
import React from 'react';
import { render, fireEvent } from "@testing-library/react";
import LoginPage, { LoginForm } from "./LoginPage";
it("Form can be submited & input field is modifiable", () => {
const mockSubmit = jest.fn();
const { debug, queryByTestId } = render(<LoginForm handleSubmit={mockSubmit}/>);
fireEvent.change(queryByTestId("input"), { target: { value: 'Joe Doe' } }); // invoke handleChange
fireEvent.submit(queryByTestId("form"));
expect(mockSubmit).toHaveBeenCalled(); // Test if handleSubmit has been called
expect(mockSubmit.mock.calls).toEqual([[{name: 'Joe Doe'}]]); // Test if handleChange works
});
推荐阅读
- c# - 如何更新 XDocument 中元素的所有实例?
- javascript - 根据当前页面的元数据为链接设置“活动”类和 href 属性
- python-3.x - 张量板。重复的图形节点:一个与占位符不连接,一个连接
- sharepoint-online - 使用 Flow 过滤 Sharepoint 列表中的日期时间字段
- r - 当组不使用 geom_raster 排他性时,有没有办法绘制组的各个组件?
- typescript - 界面自动识别类型
- java - 在 JAVA 中将两个字符串数组合并为 JSON 格式
- python - CSV 读取器/写入器不会使用新信息更新 .csv,Python3
- hadoop - HDFS 无法从 Hadoop 3.2 启动:需要 bash v3.2+
- javascript - Webpack 生成的库在 useBuiltIns 设置为“usage”的项目导入时出现问题