reactjs - 表单写作测试(包括useState)
问题描述
我想为我的表单编写一个测试,用 react 钩子(使用状态)处理,而且我正在使用reactstrap。
包.json
“酶”:“^3.11.0”,
“酶适配器反应 16”:“^1.15.5”,
这是我在UserInput组件中的代码:
const handleInputChange = (event) => {
const target = event.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
setEachEntry({ ...eachEntry, [event.target.name]: value });
};
<FormGroup>
<Label for="number">Number of simulations</Label>
<Input
name="number"
type="number"
placeholder="e.g. 10, 20"
onChange={handleInputChange}
value={number}
/>
</FormGroup>
<Button onClick={handleSubmit}>Simulate</Button>
这是UserInput.test.js中的代码
import React from "react";
import { shallow, mount } from "enzyme";
import UserInput from "./UserInput";
describe("check user input form", () => {
let wrapper = mount(<UserInput/>);
it('should set the password value on change event with trim', () => {
wrapper.find('input[type="number"]').simulate('change', {
target: {
value: 1,
},
});
expect(wrapper.find('input[type="number"]').prop('value')).toEqual(1);
});
})
但是运行测试时出现错误:
● check user input form › should set the password value on change event with trim
expect(received).toEqual(expected) // deep equality
Expected: 1
Received: ""
31 | },
32 | });
> 33 | expect(wrapper.find('input[type="number"]').prop('value')).toEqual(1);
| ^
34 | });
35 | })
36 |
有什么想法会很感激吗?
** 更新/解决方案 **
感谢 Johannes 的帮助,我需要使用act
并update()
更新组件。
it('should set the password value on change event with trim', async () => {
await act(async () => {
wrapper.find('input[type="number"]').simulate('change', {
target: {
name:'number',
value: 1,
},
});
});
wrapper.update();
expect(wrapper.find('input[type="number"]').prop('value')).toEqual(1);
});
解决方案
由于状态设置是异步操作,因此您必须将处理程序包装在 中act()
,以便 jest 可以等待操作的结果。
describe("check user input form", () => {
let wrapper = mount(<UserInput/>);
it('should set the password value on change event with trim', () => {
act(() => wrapper.find('input[type="number"]').simulate('change', {
target: {
value: 1,
},
}));
expect(wrapper.find('input[type="number"]').prop('value')).toEqual(1);
});
})
有关更多详细信息,请参阅https://www.npmjs.com/package/enzyme-adapter-react-16#reacttestutilsact-wrap。
推荐阅读
- android - How to download files like the native browser with Xamarin WebView on Android?
- javascript - 当缺少值时,如何使折线图不中断线?
- android - Jetpack Compose:如何测量渲染 UI 所用的时间?
- amazon-web-services - 如何自动聚合 Lambda-edge 的 cloudwatch 日志?
- single-spa - 这是正常行为吗?单spa activeWhen
- c# - 滑动刷新令牌生存期过期后注销用户
- git - Github - 创建一个分支,然后合并上游更改而不发回我的更改
- python-3.x - 触发后删除命令
- shell - 剪切文本文件并获取分隔符后的最后一个字段
- java - 试图为opengl实现模型批处理不确定为什么它没有显示任何东西