Я пытаюсь проверить свою форму, установив в форме состояние и отправив его. По какой-то причине, когда я вызываю функцию wrapper.setState, она не устанавливает состояние моего фактического компонента.
Журнал консоли wrapper.instance возвращает объект с корректным смоделированным состоянием. Таким образом, состояние оболочки кажется правильным, однако, когда я фактически отправляю форму на сам компонент, смоделированное состояние не переносится. Я не понимаю почему.
Мой тест
it("should dispatch a register action on form submit", () => {
let mock_user = { user: {
firstName: 'mockFN',
lastName: 'mockLN',
userName: 'mockUN',
password: 'mockPW'
} };
userActions_spy = jest.spyOn(userActions, 'register');
wrapper = mount(<Router><Register {...props} /></Router>);
wrapper.setState(mock_user, () => {
console.log("Wrapper", wrapper.instance());
wrapper.find('#register').simulate('submit');
expect(userActions_spy).toHaveBeenCalled();
});
});
Мой компонент - эта функция вызывается, когда пользователь отправляет форму. Журнал консоли здесь возвращает исходное состояние вместо моего смоделированного состояния, поэтому код не входит в логику оператора if.
submitForm = (e) => {
e.preventDefault();
const { user } = this.state;
const { dispatch } = this.props;
console.log("USER", this.state);
if (user.firstName && user.lastName && user.userName && user.password) {
this.props.dispatch(userActions.register(user));
if(this.props.error === "") {
this.props.history.push("/login");
}
} else {
this.props.dispatch(userActions.error("Form Incomplete"));
}
}