【问题标题】:Detecting javascript event handlers with Capybara使用 Capybara 检测 javascript 事件处理程序
【发布时间】:2016-06-03 16:34:57
【问题描述】:

在我的 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?

【问题讨论】:

    标签: javascript jquery ruby-on-rails capybara


    【解决方案1】:

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

    的方式检查单击处理程序是否存在
    expect(page.evaluate_script('​"click" in $._data( $(".nextCard")[0], "events" )')).to be true
    

    话虽如此,您尝试做的并不是一个好主意,最终会得到非常脆弱的测试。您在功能测试中应该做的是验证那些点击处理程序促进工作的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 2022-08-13
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多