У меня возникли проблемы с тем, что Enzyme заполнил поле ввода значением. Это было то, что я изначально пробовал:
let input = wrapper.find('#input-id');
Мне удалось «установить значение» (неправильно):
input.value = 'foo';
Я тестировал функцию, которая должна была очистить значение input
. Я написал утверждения для подтверждения значения input
до и после вызова функции.
expect(input.value).toBe('foo'); invokeFunction(); expect(toInput.value).toBe('');
Первое утверждение прошло, а второе - нет:
Expected value to be (using ===): "" Received: "foo"
На вопрос о Stackoverflow и немного позже, когда я почерпнул документацию, я получил свой ответ. Функция .find()
от Enzyme возвращает Wrapper
(либо ShallowWrapper
, либо ReactWrapper
, в зависимости от того, какой у вас рендеринг - неглубокий или смонтированный).
Я думал, что установка атрибута value
для HTMLInputElement
на самом деле установила свойство value
для Wrapper
. Поскольку моя функция была написана для очистки значения HTMLInputElement
, естественно, утверждение не удалось.
Вместо этого мне следовало получить экземпляр:
let input = wrapper.find('#input-id').instance();
Функция .instance()
возвращает ReactComponent
, что в моей тестовой среде - jsdom (это настройка по умолчанию, созданная приложением create-response-app) - эквивалентно HTMLInputElement
.