Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Capybara检测javascript事件处理程序_Javascript_Jquery_Ruby On Rails_Capybara - Fatal编程技术网

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

使用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。。。但是如果可能的话,我想用

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

添加事件的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
也就是说,您试图做的并不是一个好主意,并且最终会导致非常脆弱的测试。在特性测试中,您应该做的是验证单击处理程序促进工作的行为