在我的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?
答案 0 :(得分:1)
由于您声明使用纯DOM方法(addEventListener)添加事件,因此无法(跨浏览器/非特权代码)枚举侦听器。但是,如果处理程序通过jQuery#附加,那么你可以检查是否存在类似
的点击处理程序expect(page.evaluate_script('"click" in $._data( $(".nextCard")[0], "events" )')).to be true
话虽这么说,你要做的事情并不是一个好主意,并且最终将会进行非常脆弱的测试。您在功能测试中应该做的是验证这些点击处理程序促进工作的行为。