【发布时间】:2021-08-06 11:51:27
【问题描述】:
我有一个 App.js 文件,其中包含一个表单,提交时会触发状态更改以呈现新页面。我正在尝试创建一个执行以下步骤的模拟 Jest 测试:
- 获取模拟数据
- 像 addInfo 一样发送 POST 请求
- 检查“DONE WITH FORM”是否呈现在屏幕上。
我也有一个想法,我们可以填写一个包含 valid_address 和 valid_number 的表格,然后单击一个按钮触发 addInfo 函数以使用传入的信息运行,但是我不确定该方法,它会导致我遇到了 CORS 错误。
从我在网上看到的情况来看,我认为使用 Jest 模拟这个 addInfo,然后测试渲染的内容是最好的方法,但是我完全坚持构建这个测试。
这是我的 App.js 的内容
const addInfo = async (formInfo) => {
try {
let data = {
valid_number: formInfo.validNumber,
valid_address: formInfo.validAddress
}
let addUserUrl = process.env.REACT_APP_URL +'/verify'
let addUserData = await fetch(
addUserUrl,
{
method: "POST",
headers: {
"Content-type": "application/json",
"x-api-key": process.env.REACT_APP_KEY
},
body: JSON.stringify(data)
}
)
if (addUserData.status !== 200) {
throw 'Error adding User'
}
let addUserDataJson = addUserData.json()
let ret = {
added: true,
}
return ret
} catch (error) {
console.log('Error')
let ret = {
added: false,
}
return ret
}
}
const onFinish = async (values: any) => {
console.log('Transaction verified');
let addStatus = await addInfo({
validNumber: "123434",
validAddress: "D74DS8JDSF",
})
if (promoStatus.added) {
setState({
...state,
showPage: false
})
} else {
setState({
...state,
showPage: true
})
}
};
return (
{!state.showPage &&
<>
<div>
<p>
DONE WITH FORM
</p>
<div>
</>
}
)
这是我在 App.test.js 中尝试过的:
it('DONE WITH FORM APPEARS', async() =>{
// Render App
const { getByPlaceholderText, queryByText, getByText } = render(<App />);
// Entering Valid Number
const validNumberInputBox = getByText('Enter Valid Number);
fireEvent.change(validNumberInputBox, { target: { value: "123434" } });
expect(validNumberInputBox).toHaveValue("123434");
// Entering Valid Address
const validAddressInputBox = getByText('Enter Valid Address');
fireEvent.change(validAddressInputBox, { target: { value: "D74DS8JDSF" } });
expect(validAddressInputBox).toHaveValue("D74DS8JDSF");
// Button Click
userEvent.click(screen.getByRole('button', {name: /Submit/i}));
//Check if the DONE WITH FORM is shown
expect(await waitFor(() => getByText('DONE WITH FORM'))).toBeInTheDocument();
});
我已经尝试了几乎所有可以通过其他堆栈溢出帖子和网络文章找到的东西。所以我非常感谢有关如何实施此单元测试的任何帮助。
【问题讨论】:
标签: javascript reactjs unit-testing jestjs react-testing-library