current_user 在重定向时设置为 nil(会话丢失?)

current_user set to nil on redirect (session lost?)

配置

使用 Rails 5.1Vue.js 2.5

的 Webpacker 应用程序

我已经尝试诊断这个错误 3 天了,但我已经束手无策了。我已经开始使用标准 selenium-webdriver 使用 Capybara 添加系统测试。

当我尝试访问可验证的路由时出现问题,例如,用户设置:

RSpec.describe 'home page', type: :system do
  before(:context) do
    WebMock.disable_net_connect!(allow_localhost: true)
  end

  after do
    Warden.test_reset!
  end

  context 'when logged in' do
    context 'as an average user' do

      before do
        @profile = create(:profile)
        @user = @profile.user
        @user.update(confirmed_at: Time.now)

        login_as(@user, scope: :user)
      end

      it 'redirects to Account Settings page after pressing Account Settings' do
        visit '/'

        find('.profile-menu').hover
        find('.settings').click

        expect(page).to have_content 'Account Settings'
      end
    end
  end
end

这不是 link 并且在我的 .vue 文件中处理,它只是重定向到我需要的路径 location.href = "/users/edit";

当我在根页面上时,我已登录,current_user returns 用户和一切都很好。但是一旦我按下那个 link,它就会在我被重定向到标准 Devise 登录页面时在某个时候被重置。

如果我直接转到该页面 visit '/users/edit,但是 current_user 已设置并且一切正常。

这是我的测试设备设置:

require 'devise'

RSpec.configure do |config|
  config.include Warden::Test::Helpers
end

如果您需要一些额外信息,请告诉我,我想我已经提供了所有关键信息,但可能遗漏了一些信息。

我似乎已经解决了这个问题。我已经尝试了 中提到的几件事。据我所知,修复它的是什么修复了我的配置:

 RSpec.configure do |config|
   config.include Warden::Test::Helpers
 end

 RSpec.configure do |config|
   config.include Devise::Test::IntegrationHelpers, type: :system
 end

这也让我放弃了:

  after(:each) do
    Warden.test_reset!
  end

在我所有的测试中。我已经 运行 进行了相当多的测试并且它们不再失败,所以我现在假设这确实已经修复。