使用Capybara检测javascript事件处理程序
在我的Rails应用程序中,有很多前端js,我想检查是否有特定事件附加到DOM元素 添加事件的JS示例如下:使用Capybara检测javascript事件处理程序,javascript,jquery,ruby-on-rails,capybara,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。。。但是如果可能的话,我想用
$('.nextCard')[0].addEventListener('click',nextCard);
我想写一些类似于:
expect(page).evaluate_script('$._data( $(".nextCard")[0], "events" )').to eq('nextCard');
我知道这有点神秘,我可以单独测试JS。。。但是如果可能的话,我想用Ruby/Capybara做所有的测试
由于您声明事件是使用普通DOM方法(addEventListener)添加的,因此无法(跨浏览器/非特权代码)枚举侦听器。但是,如果处理程序是通过jQuery#on连接的,那么您可以使用以下内容检查是否存在单击处理程序
expect(page.evaluate_script('"click" in $._data( $(".nextCard")[0], "events" )')).to be true
也就是说,您试图做的并不是一个好主意,并且最终会导致非常脆弱的测试。在特性测试中,您应该做的是验证单击处理程序促进工作的行为