Rspec 系统测试在单独 运行 时通过,在整个套件 运行 时失败
Rspec System Test passes when run individually, fails when run with entire suite
当我 运行 隔离时,我通过了以下测试:
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"
为什么这个测试在我 运行 与其他测试一起进行时会失败,我如何修复它以便在我 运行 所有测试时它通过?
如果不看其他测试,很难回答这个问题。
但我注意到一些值得检查的要点:
- 您正在通过导航应用程序创建数据,也许其他测试创建数据,这会阻止创建此测试中的数据
- 命令
find("#del_one_event").click
(前一行)只是执行点击,但不会等到任何事情发生。对于数据库中的所有测试和更多数据,可能需要更长的时间才能出现 .swal2-actions
并且在您执行 within('.swal2-actions') { click_button('Yes') }
时尚未出现
另一种接近错误的方法是制作屏幕截图并进行比较。查看 gem capybara-screenshot
没有更多信息无法确定。如果您能创建并发布一个 minimum complete verifiable example.
就更好了
根据所提供的信息,我猜测当 运行 与其他测试一起失败时失败的测试未正确隔离。其他示例正在更改应用程序的状态,导致此测试失败。因此,请查看您的 before
和 after
挂钩,并确保您在 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')
如果其中 none 个解决了问题,您可能会遇到 的问题,但这更难调试。
当我 运行 隔离时,我通过了以下测试:
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"
为什么这个测试在我 运行 与其他测试一起进行时会失败,我如何修复它以便在我 运行 所有测试时它通过?
如果不看其他测试,很难回答这个问题。 但我注意到一些值得检查的要点:
- 您正在通过导航应用程序创建数据,也许其他测试创建数据,这会阻止创建此测试中的数据
- 命令
find("#del_one_event").click
(前一行)只是执行点击,但不会等到任何事情发生。对于数据库中的所有测试和更多数据,可能需要更长的时间才能出现.swal2-actions
并且在您执行within('.swal2-actions') { click_button('Yes') }
时尚未出现
另一种接近错误的方法是制作屏幕截图并进行比较。查看 gem capybara-screenshot
没有更多信息无法确定。如果您能创建并发布一个 minimum complete verifiable example.
就更好了根据所提供的信息,我猜测当 运行 与其他测试一起失败时失败的测试未正确隔离。其他示例正在更改应用程序的状态,导致此测试失败。因此,请查看您的 before
和 after
挂钩,并确保您在 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')
如果其中 none 个解决了问题,您可能会遇到