RSPEC系统测试通过单独运行时通过,使用整个套件运行时失败



我有以下测试,该测试是孤立运行时通过的:

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"

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

没有更多信息。最好创建并发布最低完整的可验证示例并发布。

根据给出的信息,我猜想未正确隔离使用其他测试时失败的测试。其他示例正在更改应用程序的状态,导致该测试失败。因此,请查看您的beforeafter挂钩,并确保您在Rails_helper.rb中设置config.use_transactional_fixtures = true

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

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

to

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

如果这些都没有解决问题,则您可能会遇到浏览器缓存的问题,但这甚至更难进行调试。

这很难回答而不看到其他测试。但是我注意到一些值得一看的要点:

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

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