#javascript #reactjs #jestjs #enzyme
#javascript #reactjs #jestjs #enzyme
Вопрос:
Я хочу протестировать событие input onchange в компоненте. У меня есть такой jsx:
export default class Login extends Component {
constructor(props) {
super(props);
autoBind(this);
}
handleChangeFields() {
const email = this.email.value;
const password = this.password.value;
const validationResults = {
email: isValidEmail(email),
password: password.length >= 8,
};
const isValidFields = Object.values(validationResults).every(Boolean);
}
render() {
return (
<form onSubmit={this.validateLoginForm}>
<input
type="email"
name="email"
ref={(input) => this.email = input}
placeholder="Email *"
onChange={this.handleChangeFields}
/>
<input
type="password"
name="password"
ref={(input) => this.password = input}
placeholder="Password *"
onChange={this.handleChangeFields}
/>
<input
type="submit"
value="login"
/>
</form>
);
}
}
Я написал такой тест, чтобы проверить, был ли вызван handleChangeFields
:
test('should call fields change method', () => {
const instance = wrapper.instance();
const spyChange = jest.spyOn(instance, 'handleChangeFields');
const input = wrapper.find('input').at(0);
input.simulate('change', { target: { value: 'test@test.com' } });
expect(spyChange).toHaveBeenCalled();
});
но у меня ошибка во время тестового вызова:
TypeError: Cannot read property 'value' of undefined
но я не могу понять, почему произошла ошибка. Я установил значение ввода в тесте jest input.simulate('change', { target: { value: 'test@test.com' } });
, но ошибка все еще присутствует
Комментарии:
1.
handleChangeFields
используется как обратный вызов, но не является стрелкой. Это связано? Я не уверен, что проблема в ссылках, может быть, потому, что он получает неверноthis
.2. handleChangeFields не является функцией обратного вызова, она привязана к классу
3. добавлен весь компонент
4. Здесь он используется как обратный вызов
onChange={this.handleChangeFields}
. В любом случае, это, похоже, не проблема. Ссылки — известная проблема, github.com/enzymejs/enzyme/issues/1394 . Используйтеmount
, чтобы заставить Enzyme вести себя более как настоящий рендерер.5. изменено, но сейчас возникает другая проблема. По какой-то причине метод не вызывается, вот результат теста Ожидаемое количество вызовов: >= 1 Полученное количество вызовов: 0 Я создам другой поток