在 React 中测试按钮的禁用状态
Testing for a button's disabled state in React
我有一个简单的组件,我想用React和ReactUtils进行测试。
var TextConfirmButton = React.createClass({
getInitialState: function() {
return {
inputText: '',
confirmText: this.props.confirmText,
buttonEnabled: false,
inputEnabled: true
}
},
handleChange: function(event) {
this.setState({ inputText: event.target.value });
},
handleConfirm: function() {
this.props.onConfirmClick();
// When user clicks the confirm button, disable both the input and button.
this.setState({ buttonEnabled: false, inputEnabled: false });
},
render: function() {
return (
<div>
<input onChange={this.handleChange} disabled={!this.state.inputEnabled} type='text' ref='text' placeholder={this.state.confirmText} />
<button onClick={this.handleConfirm} disabled={this.state.inputText !== this.state.confirmText} className='btn btn-danger'>Delete</button>
</div>
)
}
})
有没有办法测试按钮的禁用状态?
我尝试过:
var TestUtils = React.addons.TestUtils;
describe('TextConfirmButton', function () {
it('starts with confirm button disabled', function () {
var onConfirmClick = function() {
console.log("Confirm click");
}
var textConfirmButton = TestUtils.renderIntoDocument(
<TextConfirmButton confirmText="example" onConfirmClick={this.onConfirmClick} />
);
var textConfirmButtonNode = ReactDOM.findDOMNode(textConfirmButton);
expect(textConfirmButtonNode.disabled).toEqual('disabled');
});
});
但是测试失败,错误:textConfirmButtonNode.disabled undefined
.因此,.disabled
显然是错误的方法。
有什么建议吗?
您需要使用 TestUtils
#findRenderedDOMComponentWithTag 才能查询 TestUtils 生成的 DOM。
var textConfirmButtonNode =
TestUtils.findRenderedDOMComponentWithTag(textConfirmButton, 'button');
expect(textConfirmButtonNode.disabled).toEqual(true);
textConfirmButtonNode
引用render()
函数中最外层的div
。 除非它的属性是disabled
,否则它返回未定义也就不足为奇了。
我的猜测是,您正在寻找引用实际button
的DOM节点。
var textConfirmButtonNode = ReactDOM.findDOMNode(textConfirmButton);
var renderedButtonNode = textConfirmButtonNode.childNodes[1];
expect(renderedButtonNode.disabled).toEqual('disabled');
相关文章:
- iOS 中的按钮触摸状态
- 使用按钮和媒体查询切换显示状态
- 带有嵌套状态的Angular ui路由器和后退按钮
- ReactJS:使用浏览器按钮导航时保存状态
- MVC和JQuery Mobile:单选按钮在发布时释放状态
- 制作一个按钮倒计时计时器,该计时器将在5分钟后永久禁用,即使在页面刷新时也应保持禁用状态
- 如何知道鼠标按钮的当前状态(mouseup状态或mousedown状态)
- 如何使用Javascript检查当前鼠标按钮状态
- 如何重置剑道MVVM单选按钮's已检查状态
- 按钮处于活动状态,焦点无法在Mac FireFox上工作
- 美国地图插件,具有状态数据/悬停功能的新按钮
- 在单击按钮时激活按钮的悬停状态,直到单击另一个按钮(Javascript/JQuery)
- 重置按钮在 jQuery 中的单击状态
- 如何使按钮具有 :活动状态 1 秒
- 按钮未启用,如果复选框处于打开状态
- 引导有状态按钮未按预期工作
- 如何使用 removeClass 解决状态按钮中的 jquery ui / firefox 错误
- 当AJAX调用完成时重置Bootstrap加载状态按钮
- 多个状态按钮-背景色
- 输入表单提交上的引导状态按钮