使用 Capybara 检测 javascript 个事件处理程序
Detecting javascript event handlers with 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?
由于您声明事件是使用普通 DOM 方法 (addEventListener) 添加的,因此无法(交叉 browser/unprivileged 代码)枚举侦听器。但是,如果处理程序是通过 jQuery#on 附加的,那么您可以检查是否存在点击处理程序,例如
expect(page.evaluate_script('"click" in $._data( $(".nextCard")[0], "events" )')).to be true
话虽如此,您尝试做的并不是一个好主意,并且最终会进行非常脆弱的测试。您在功能测试中应该做的是验证那些点击处理程序促进工作的行为。
在我的 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?
由于您声明事件是使用普通 DOM 方法 (addEventListener) 添加的,因此无法(交叉 browser/unprivileged 代码)枚举侦听器。但是,如果处理程序是通过 jQuery#on 附加的,那么您可以检查是否存在点击处理程序,例如
expect(page.evaluate_script('"click" in $._data( $(".nextCard")[0], "events" )')).to be true
话虽如此,您尝试做的并不是一个好主意,并且最终会进行非常脆弱的测试。您在功能测试中应该做的是验证那些点击处理程序促进工作的行为。