簡體   English   中英

通過RSpec設置會話值

[英]Setting a session value through RSpec

我當前的代碼如下所示:

/spec/support/spec_test_helper.rb

module SpecTestHelper
  def login_admin
    user = FactoryGirl.create(:user, type: 0)
    session[:user_id] = user.id
  end
end

/app/controllers/application_controller.rb

def current_user
  if session[:user_id].nil?
    render plain: 'Error', status: :unauthorized
  else
    @current_user ||= User.find(session[:user_id])
  end
end

不幸的是,current_user方法中的session始終為空。 有沒有辦法通過RSpec控制會話?

這將根據規格類型進行更改。 例如, feature規范將不允許您直接修改會話。 但是, controller規格會。

您需要將輔助方法模塊包含在示例組中。 假設你有一個WidgetsController

require 'support/spec_test_helper'

RSpec.describe WidgetsController, type: :controller do
  include SpecTestHelper

  context "when not logged in" do
    it "the request is unauthorized" do
      get :index
      expect(response).to have_http_status(:unauthorized)
    end
  end

  context "when logged in" do
    before do
      login_admin
    end

    it "lists the user's widgets" do
      # ...
    end
  end
end

您還可以使用元數據 自動將模塊包含到所有規格或特定規格中

我經常通過將配置更改添加到定義幫助程序方法的文件中來執行此操作:

/spec/support/spec_test_helper.rb

module SpecTestHelper
  def login_admin
    user = FactoryGirl.create(:user, type: 0)
    session[:user_id] = user.id
  end
end

RSpec.configure do |config|
  config.include SpecTestHelper, type: :controller
end

你只需要這樣做:

@request.session[:session_id] = "blabla"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM