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