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

时间:2018-04-14 14:09:37

标签: ruby-on-rails vue.js rspec devise capybara

配置

使用Rails 5.1Vue.js 2.5

的Webpacker应用程序

我一直在尝试将此错误诊断为3天,而且我的智慧结束了。我已经开始使用标准Capybara使用selenium-webdriver添加系统测试。

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

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

这不是一个链接,而是在我的.vue文件中处理,该文件只会重定向到我需要的路线location.href = "/users/edit";

当我在根页面上时,我已登录,current_user返回用户,一切都很棒。但是,只要我按下该链接,就会在重定向到标准Devise登录页面时重置它。

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

这是我的测试设置:

require 'devise'

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

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

1 个答案:

答案 0 :(得分:0)

我似乎解决了这个问题。我已经尝试了SO answer中提到的几件事。据我所知,修复它的原因是:

 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

在我的所有测试中。我已经进行了不少测试,他们不再失败了,所以我现在假设这已经确定了。