【问题标题】:Why is spec failing?为什么规范失败?
【发布时间】:2014-11-27 06:50:06
【问题描述】:

我有两个规格。一个使用所有默认值编写(我认为 selenium 是默认值?),另一个使用 webkit。它们完全相同,但一个失败另一个没有

规格

let(:admin) {create(:user, :admin)}
  let(:programme) { create(:programme, :full_payment_scheme) }

  before(:each) do
    login_as(admin)
    visit edit_programme_path(programme)
  end

  scenario 'adding a payment_scheme', js: true do
      new_payment_scheme = create(:payment_scheme)
      visit edit_programme_path(programme)
      click_link 'Add Payment Scheme'
      select new_payment_scheme.name, from: all('select[id*="programme_programme_payment_schemes_attributes"][id*="payment_scheme_id"]').last[:id]
      fill_in all('input[id*="programme_programme_payment_schemes_attributes"][id*="markup"]').last[:id], with: 50
      fill_in all('input[id*="programme_payment_scheme_allocations_attributes"][id*="interval_weeks"]').last[:id], with: 10
      fill_in all('input[id*="programme_payment_scheme_allocations_attributes"][id*="allocation"]').last[:id], with: 100

      expect {click_button "Save"}.to change{ProgrammePaymentScheme.count}.by(1)
  end

上述规范中的 javascript 发生在 click_link 'Add Payment Scheme' 上。它将支付方案的控件添加到页面并填充这些控件。注意我知道 ID 看起来很奇怪,但是当您使用嵌套属性并将控件动态添加到页面时,ID 中有一个随机部分(通常计算为日期)。所以我不能使用直接ID。我必须使用一个时髦的 CSS 选择器。

默认结果

Programme edit page
  editing the payment_scheme
    adding a payment_scheme

Finished in 8.57 seconds (files took 1.25 seconds to load)
1 example, 0 failures

Top 1 slowest examples (7.6 seconds, 88.7% of total time):
  Programme edit page editing the payment_scheme adding a payment_scheme
    7.6 seconds ./spec/features/programmes/programme_edit_spec.rb:48
ryanme@Ryan-Mes-MacBook-Pro ~/Sites/phoenix ±20487304354485⚡ »  rspec spec/features/programmes/programme_edit_spec.rb

Webkit 的结果

Programme edit page
  editing the payment_scheme
    adding a payment_scheme (FAILED - 1)

Failures:

  1) Programme edit page editing the payment_scheme adding a payment_scheme
     Failure/Error: expect {click_button "Save"}.to change{ProgrammePaymentScheme.count}.by(1)
       expected result to have changed by 1, but was changed by 0
     # ./spec/features/programmes/programme_edit_spec.rb:57:in `block (3 levels) in <top (required)>'
     # -e:1:in `<main>'

Finished in 3.8 seconds (files took 0.53482 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/features/programmes/programme_edit_spec.rb:48 # Programme edit page editing the payment_scheme adding a payment_scheme

Top 1 slowest examples (3.48 seconds, 91.5% of total time):
  Programme edit page editing the payment_scheme adding a payment_scheme
    3.48 seconds ./spec/features/programmes/programme_edit_spec.rb:48

当我使用 launchy 保存并打开页面时,我发现由于某种原因它没有填写付款方案字段。此功能使用 selenium 可以正常工作。我已经尝试过重做测试,但没有运气。

我认为这就是一切。任何意见将不胜感激。

【问题讨论】:

    标签: ruby ruby-on-rails-4 rspec capybara capybara-webkit


    【解决方案1】:

    这可能是几件事

    最明显的是,您可能会遇到异步问题,因为您使用的是 Capybara。 Capybara/test 线程告诉浏览器点击按钮然后继续。它不会等待其他任何事情发生,因此浏览器仍然可以处理 JS 并向应用程序发送请求。您可以通过睡眠或监听触发来解决此问题。

    也可能是你的按钮点击的 JS 或处理 JS 请求的代码没有做它应该做的事情。

    【讨论】:

    • 另外,我强烈建议您在控制台中/在撬中运行您的测试。这真的很有用。您启动一个 pry 会话,以与您的代码相同的方式打开浏览器并动态编写 selenium(或您使用的任何东西),直到它完成它应该做的事情
    • 谢谢。我将尝试通过控制台编写 selenium 脚本。从来没有想过这样做。
    猜你喜欢
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 2021-12-27
    • 2012-10-17
    • 2022-01-16
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    相关资源
    最近更新 更多