Мене бентежить, як отримати доступ до <input>значення під час використання mount. Ось те, що я отримав як тест:
it('cancels changes when user presses esc', done => {
const wrapper = mount(<EditableText defaultValue="Hello" />);
const input = wrapper.find('input');
console.log(input.render().attr('value'));
input.simulate('focus');
done();
});
Консоль роздруковується undefined. Але якщо я трохи модифікую код, це працює:
it('cancels changes when user presses esc', done => {
const wrapper = render(<EditableText defaultValue="Hello" />);
const input = wrapper.find('input');
console.log(input.val());
input.simulate('focus');
done();
});
За винятком, звичайно, input.simulateрядка не вдається, оскільки я використовую renderзараз. Мені потрібні обидва, щоб нормально працювати. Як це виправити?
РЕДАГУВАТИ :
Слід зазначити, що <EditableText />це не контрольований компонент. Але коли я проходжу defaultValueв <input />, по- видимому , щоб встановити значення. Другий блок коду вище роздруковує значення, і також, якщо я перевіряю вхідний елемент у Chrome і ввожу $0.valueв консолі, він показує очікуване значення.
input.render()Чи неreact-domроблять. Це: airbnb.io/enzyme/docs/api/ShallowWrapper/render.html