我对<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在控制台中键入,它会显示预期值。