Я пытаюсь проверить значение useState и объект в react native с помощью фермента и шутки. У меня он работает при использовании состояния только с одним значением, но у меня не получается использовать много значений в useState с указанной выше ошибкой. В onchange я использую оператор распространения, и я думаю, что это мне нужно как-то реализовать в моем тесте под mockEvent, но я не могу найти способ, и я застрял. Любая помощь приветствуется.
Компонент:
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;
Тест:
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);
});