【问题标题】:Rspec System Test passes when run individually, fails when run with entire suiteRspec System Test 单独运行时通过,与整个套件一起运行时失败
【发布时间】:2019-02-18 10:22:45
【问题描述】:

当我单独运行它时,我有以下测试通过:

require 'rails_helper'

RSpec.describe 'deleting a non-recurring user event', js: true do

  let(:user)       { create(:proofreader_user) }
  let(:date)       { Date.current.strftime('%Y-%m-%d') }
  let(:date_time)  { date + ' 00:00'}

  it 'deletes the event' do
    visit root_path
    click_on "Login"
    fill_in  "Email",    with: user.email
    fill_in  "Password", with: user.password
    click_on "Sign In"
    visit calendar_path
    expect(current_path).to eq(calendar_path)
    expect(page).to have_css("#complete_registration:disabled")
    expect(page).to_not have_css("td.fc-event-container")
    find("td.fc-day[data-date='#{date}']").click
    expect(page).to have_css("div#user-event-modal")
    expect(page).to have_select('user_event[title]', :options => UserEvent.titles.keys)
    expect(find('input', id: 'user_event_starting').value).to eq date_time
    expect(find('input', id: 'user_event_ending').value).to eq date_time
    page.execute_script("$('input#user_event_starting').val('#{date} 09:00')")
    expect(find('input', id: 'user_event_starting').value).to eq date + ' 09:00'
    page.execute_script("$('input#user_event_ending').val('#{date} 12:00')")
    expect(find('input', id: 'user_event_ending').value).to eq date + ' 12:00'
    click_on 'Save'
    expect(page).to have_css("td.fc-event-container a.fc-day-grid-event")
    expect(page).to have_css("span.fc-time", text: '9a - 12p')
    expect(page).to have_css("span.fc-title", text: 'work')
    find("span.fc-time", text: '9a - 12p').click
    expect(page).to have_css("div#user-event-modal")
    find("#del_one_event").click
    within('.swal2-actions') { click_button('Yes') }
    wait_for { page }.to_not have_css("div#user-event-modal")
    expect(page).to_not have_css("td.fc-event-container")
    expect(page).to_not have_css("span.fc-time", text: '10a - 14p')
  end
end

但是,当我运行所有测试时,出现以下错误:

Failure/Error: within('.swal2-actions') { click_button('Yes') }

     Capybara::ElementNotFound:
       Unable to find visible css ".swal2-actions"

为什么当我与其他测试一起运行此测试时会失败,我该如何修复它以便在我运行所有测试时它通过?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 rspec-rails


    【解决方案1】:

    如果没有更多信息,无法确定。最好能创建并发布minimum complete verifiable example

    根据给出的信息,我猜想与其他测试一起运行时失败的测试没有正确隔离。其他示例正在更改应用程序的状态,导致此测试失败。因此,请查看您的 beforeafter 钩子,并确保您在 rails_helper.rb 中设置了 config.use_transactional_fixtures = true

    如果在单击#del_one_event 和出现.swal2-actions 之间可能存在延迟,则更改

    within('.swal2-actions') { click_button('Yes') }
    

    find('.swal2-actions').click_button('Yes')
    

    如果这些都不能解决问题,您可能会遇到browser caching 的问题,但这更难调试。

    【讨论】:

    • 谢谢你,我会尝试你的建议并反馈给你。
    • 按照您的说明更改内部查找似乎已经解决了问题。
    【解决方案2】:

    如果不查看其他测试,这很难回答。 但我注意到一些值得一试的点:

    • 您正在通过导航应用程序来创建数据,也许其他测试会创建数据,从而阻止创建此测试中的数据
    • 命令find("#del_one_event").click(前一行)只是执行点击,但不会等到任何事情发生。由于数据库中的所有测试和更多数据,可能需要更长的时间才能出现.swal2-actions,并且在您执行within('.swal2-actions') { click_button('Yes') } 时尚未出现

    另一种接近错误的方法是制作屏幕截图并进行比较。查看宝石capybara-screenshot

    【讨论】:

    • 感谢您的想法和专业知识。我将尝试看看如何设置等待 swal2-actions 出现,看看是否可以解决它。
    • 你是对的,等待 swal-2 动作确认模式出现时出现问题。由于提供和工作的确切代码,我不得不把它交给@OldPro。也感谢您的指导和专业知识。我希望我可以分配赏金,但他们还没有在这里提供这个选项。
    • @chell 没问题。不过,如果这有帮助,我们将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多