我希望能够使用reactjs模拟用户输入文本框,以便我可以测试我的验证状态消息。
我有一个在keyUp上验证的react组件
以下是我尝试过的一个简单示例。
nameInput.props.value = 'a';
React.addons.TestUtils.Simulate.keyUp(nameInput);
React.addons.TestUtils.findRenderedDOMComponentWithClass(component, 'has-error');
当我在验证器
中调试时,这似乎没有改变绑定文本框的值React.addons.TestUtils.Simulate.keyUp(nameInput, {key: 'a'});
React.addons.TestUtils.findRenderedDOMComponentWithClass(component, 'has-error');
这也不是。
有人能指出我在正确的轨道上,第二个是内联我可以在模拟(http://facebook.github.io/react/docs/test-utils.html)周围找到的文档,第一个对我有意义(设置实际的文本框值然后伪造一个事件)< / p>
答案 0 :(得分:26)
通过设置nameInput.props.value = 'a';
,您实际上并未更新组件中的值。
您应该使用React.addons.TestUtils.Simulate.change(nameInput, { target: { value: 'a' } });
或类似的东西来模拟修改实际值。
答案 1 :(得分:1)
我发现这种语法对我来说效果更好:
const emailInput = component.refs.userEmailInput;
emailInput.value = 'test@gmail.com';
Simulate.change(component.refs.userEmailInput);
第二行使用文本'test@gmail.com'更新输入。最后一行触发了更改。