Попробуйте заменить
input.value = newValue;
на
input.simulate('change', {target: {value: newValue}});
или
input.simulate('input', {target: {value: newValue}});
Чтобы вызвать событие (onChange
или onInput
), вам необходимо смоделировать событие DOM. Простое изменение значения на входе не вызывает слушателей React.
Другое дело, вы делаете выборку в componentDidMount. Это асин c вызов. Сразу после mount
список чемпионов не будет заполнен. Есть несколько способов подождать, пока это произойдет. Вы можете использовать ожидание ожидания или написать аналогичную функцию самостоятельно. Итак, наконец, тест должен выглядеть примерно так:
it('Should change the state after change the input value', () => {
const newValue = 'Ahri';
const wrapper = mount(app);
await waitForExpect(() => {
expect(wrapper.state('championsList')).to.be.not.empty;
});
const input = wrapper.find('input');
input.simulate('change', {target: {value: newValue}});
wrapper.update();
expect(input.value).toEqual(newValue);
expect(wrapper.state('championSelected')).toEqual(newValue);
});
Примечание : вы можете предпочесть использовать такой инструмент, как nock , чтобы высмеивать бэкэнд вместо вызова фактическая конечная точка в тестах.