Nie mam pojęcia, jak uzyskać dostęp do <input>wartości podczas używania mount. Oto, co mam jako mój test:
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();
});
Konsola drukuje undefined. Ale jeśli trochę zmodyfikuję kod, działa:
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();
});
Tyle że, oczywiście, input.simulatelinia zawodzi, ponieważ używam renderteraz. Potrzebuję obu, aby działać poprawnie. Jak to naprawić?
EDYCJA :
Powinienem wspomnieć, że <EditableText />nie jest elementem kontrolowanym. Ale kiedy przechodzę defaultValuedo <input />, wydaje się , że ustawia wartość. Drugi blok kodu powyżej wypisuje wartość i podobnie, jeśli sprawdzę element wejściowy w Chrome i wpiszę $0.valuew konsoli, pokazuje oczekiwaną wartość.
input.render()jestreact-domrenderowany. To jest to: airbnb.io/enzyme/docs/api/ShallowWrapper/render.html