1 native reactjs jestjs enzyme
我正在尝试测试 useState 值和对象与酶和玩笑的本机反应。当使用只有一个值的状态时,它可以工作,但我在 useState 中使用许多值时失败,并出现上述错误。在 onchange 中,我使用展开运算符,我认为这就是我需要在模拟事件下的测试中以某种方式实现的,但我找不到方法,我被困住了。任何帮助是极大的赞赏。
成分:
import React from "react";
import { View, Text, TextInput, TouchableOpacity } from "react-native";
const RegisterScreen = () => {
const [user, setUser] = React.useState({ name: "", email: "", password: "", password2: "" });
return (
<View testID='register-component'>
<Text testID='test'>RegisterScreen</Text>
<TextInput
testID='register-input-name'
onChangeText={(e) => {
setUser(...user, [name], e.target.value);
}}
name='name'
value={user.name}
/>
<TextInput testID='register-input-email' />
<TextInput testID='register-input-password' label='Password' autoCapitalize='none' autoCorrect={false} secureTextEntry={true} />
<TextInput testID='register-input-confirm' />
<TouchableOpacity testID='register-submit-button' />
</View>
);
};
export default RegisterScreen;
Run Code Online (Sandbox Code Playgroud)
测试:
test("name input changes state", () => {
const mockSetUser = jest.fn();
React.useState = jest.fn(() => [{ name: "", email: "", password: "", password2: "" }, mockSetUser]);
const wrapper = shallow(<RegisterScreen />);
const nameinput = wrapper.find("[testID='register-input-name']");
const mockEvent = { target: { name: "name", value: "test" } };
nameinput.simulate("changeText", mockEvent);
const nameVal = nameinput.find("[value='test']");
expect(nameVal.length).toBe(1);
});
Run Code Online (Sandbox Code Playgroud)
问题是这样的:
setUser(...user, [name], e.target.value);
Run Code Online (Sandbox Code Playgroud)
这不符合您的意图。更换这个也许可以解决问题。
setUser({ ...user, name: e.target.value })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36579 次 |
| 最近记录: |