使用Capybara检测javascript事件处理程序

时间:2016-06-03 16:34:58

标签: javascript jquery ruby-on-rails capybara

在我的Rails应用程序中有很多前端js,我想检查一个特定事件是否附加到DOM元素。

添加事件的JS示例如下:

$('.nextCard')[0].addEventListener('click',nextCard);

我想写一些类似的东西:

     expect(page).evaluate_script('​$._data( $(".nextCard")[0], "events" )').to eq('nextCard');

我知道它有点神秘,我可以单独测试JS ......但如果可能的话,我想用Ruby / Capybara进行所有测试。

How to return a value when using execute_script in capybara?

Can I find events bound on an element with jQuery?

1 个答案:

答案 0 :(得分:1)

由于您声明使用纯DOM方法(addEventListener)添加事件,因此无法(跨浏览器/非特权代码)枚举侦听器。但是,如果处理程序通过jQuery#附加,那么你可以检查是否存在类似

的点击处理程序
expect(page.evaluate_script('​"click" in $._data( $(".nextCard")[0], "events" )')).to be true

话虽这么说,你要做的事情并不是一个好主意,并且最终将会进行非常脆弱的测试。您在功能测试中应该做的是验证这些点击处理程序促进工作的行为。