Devise&RSpec-用户仅在第一次测试中登录

时间:2018-09-03 12:17:06

标签: ruby-on-rails rspec devise

我正在使用RSpec编写RESTFul控制器的规范,我需要通过Devise登录用户。

以下代码导致用户在第一个it语句中正确登录,但在第二个语句中未正确登录。

如果我将beforeafter:all更改为:each,则两条语句都会失败,就像用户未登录一样。

RSpec.describe SomeController, type: :controller do
  describe '#index' do
    before :all do
      @account = create(:account)
      @user = @account.users.first
      sign_in(@user)
    end

    after :all do
      sign_out(@user)
    end

    it 'should load all objects of a @user' do
      get :index

      body = JSON.parse(response.body)
      expect(body['data'].length).to eq(4)
      expect(response).to have_http_status(:ok)
    end

    it 'should load all objects of a @user' do
      get :index

      body = JSON.parse(response.body)
      expect(body['data'].length).to eq(4)
      expect(response).to have_http_status(:ok)
    end
  end
end

我发现此问题的答案很少,一个是在测试ENV中使用Cookie存储(未能解决问题),还有一个RSpec with devise - only the first test is logged in也没有帮助我解决问题。

RSpec 3.7 Rails 5.2 设计4.4

我们将非常感谢您的帮助!谢谢

1 个答案:

答案 0 :(得分:0)

如果您使用的是ActAsTenant,请不要忘记将ActAsTenant.current_tenant = nil放在before(:each)的开头。那给我造成了你所描述的同样的问题