Tôi bối rối về cách truy cập <input>giá trị khi sử dụng mount. Đây là những gì tôi nhận được làm bài kiểm tra của mình:
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();
});
Bàn điều khiển in ra undefined. Nhưng nếu tôi sửa đổi một chút mã, nó hoạt động:
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();
});
Tất nhiên, ngoại trừ input.simulateđường dây bị lỗi vì tôi đang sử dụng renderbây giờ. Tôi cần cả hai để hoạt động bình thường. Làm cách nào để sửa lỗi này?
CHỈNH SỬA :
Tôi nên đề cập, <EditableText />không phải là một thành phần được kiểm soát. Nhưng khi tôi chuyển defaultValuevào <input />, nó dường như đã đặt giá trị. Khối mã thứ hai ở trên không in ra giá trị và tương tự như vậy nếu tôi kiểm tra phần tử đầu vào trong Chrome và nhập $0.valuevào bảng điều khiển, nó sẽ hiển thị giá trị mong đợi.
input.render()đượcreact-domkết xuất. Đó là cái này: airbnb.io/enzyme/docs/api/ShallowWrapper/render.html