首页 > 解决方案 > 如何在 capybara 测试中触发 keyup。我已经尝试了所有标准方法

问题描述

我编写了以下 rspec/capybara 测试:

scenario "admin can create patient invoices with discounted items", driver: :poltergeist do
    product = create(:product, practice_group: practice_group)
    patient = create(:patient)
    location = create(:location, practice_group: practice_group)

    practice_group

    login_as_admin(admin)

    visit "/invoices/new?patient_id=#{patient.id}"

    select location.name, :from => "invoice_location_id"
    add_product_to_invoice(product)
    add_discount_to_product(0.05)
    submit_invoice_form

    expect(Invoice.count).to eq(1)
    expect(Invoice.last.total_amount).to eq("£9.50")
end

def add_discount_to_product(discount)
    find(".discount-input").send_keys((discount * 100).to_s)
    page.execute_script("$('.discount-input').trigger('keyup')")
end

我尝试了各种不同的策略来触发这个按键事件,但是 jQuery.on监听器在测试期间没有触发。

我正在使用 poltergeist 驱动程序。

关于如何让这个事件触发的任何建议?似乎水豚.trigger不适用于 poltergeist。

标签: ruby-on-railsrspecphantomjscapybarapoltergeist

解决方案


send_keys将发送 keyup 事件 - 更有可能您的页面上实际上有 JS 不能由 Poltergeist 运行,因为它不支持现代 JS/CSS。尝试使用 selenium 或新的直接到 Chrome CDP 驱动程序之一(如幻影)运行测试


推荐阅读