【发布时间】:2016-02-23 02:33:46
【问题描述】:
现在,我不可能是唯一遇到此问题的人。我有一个用 React 构建的简单页面。在其中,我有一个简单的组件,它呈现 select 并且 - 在值更改时 - 触发回调。该组件的外壳如下所示:
const Selector = React.createClass({
render: function() {
return (
<select id="selector" onChange={this.props.onChange}>
<option value="1">1</option>
<option value="2">2</option>
</select>
);
}
})
我想以编程方式在我的 CasperJS 测试脚本中的 select 上触发一个 change 事件,以测试随后的页面更改效果,但是当我能够在 JS 中选择备用选项时,change 事件永远不会触发。问题的附加颜色以及我在下面已经尝试过的事情:
我尝试过的事情
$('#selector').val('2').change()
$('#selector').val('2').trigger('change')
var el = $('#selector').get(0);
var event = new Event('input', {bubbles: true});
el.dispatchEvent(event);
var el = $('#selector').get(0);
var event = new Event('onSelect', {bubbles: true});
el.dispatchEvent(event);
var el = $('#selector').get(0);
var event = new Event('onChange', {bubbles: true});
el.dispatchEvent(event);
var el = $('#selector').get(0);
var event = new Event('change', {bubbles: true});
el.dispatchEvent(event);
附加颜色
我知道在组件上触发 DOM 事件的建议方法是使用 React Test Utilities 模块中的 Simulate 对象。但是,由于PhantomJS and SlimerJS are not node modules 我不能简单地在我的 Casper 测试脚本中要求该模块。
选项
现在,我觉得我有两个选择:
1) 使用 SpookyJS 通过 Node 驱动我的脚本,并在诡异的脚本中需要 react 测试实用程序模块。不过,我真的不想这样做。
【问题讨论】:
标签: javascript reactjs phantomjs html-select casperjs