2015-10-18 74 views
1

我正在測試我的會話控制器,但我得到這個錯誤,登錄功能的作品,我在瀏覽器上測試它,但林新的測試Rspec,並不能得到這個工作Rails Rspec - undefined方法`會話'

Failure/Error: expect(response.session[:user_id]).to eq(@user_attr.id) 
NoMethodError: 
    undefined method `session' for #<ActionController::TestResponse:0xd30df10> 
# ./spec/controllers/sessions_controller_spec.rb:20:in `block (3 levels) in <top (required)>' 

這是我的控制器代碼:

def new 
    @user = User.new 
end 

def create 
    @user = User.find_by(username: params[:user][:username]) 
    if @user && @user.authenticate(params[:user][:password]) 
     session[:user_id] = @user.id 
     redirect_to root_path 
    else 
     render :new 
    end 
end 

Rspec的代碼:

require 'rails_helper' 

RSpec.describe SessionsController, type: :controller do 
describe "get Login page" do 
    it "returns http status" do 
     get :new 
     expect(response).to have_http_status(:success) 
    end 
end 

describe "session" do 
    before(:each) do 
     @user = FactoryGirl.create(:user) 
     @user_attr = FactoryGirl.attributes_for(:user) 
    end 

    it "gives session" do 
     request.session[:user_id] = nil 
     post :create, user: @user_attr 
     expect(response.session[:user_id]).to eq(@user_attr.id) 
    end 
end 
end 

回答

4

session是一個沒有請求/響應上下文的變量,如示例中所示。如果你想操縱它或檢查它包含的值,你可以簡單地做這樣的事情:

it "gives session" do 
    session[:user_id] = nil 
    post :create, user: @user_attr 
    expect(session[:user_id]).to eq(@user_attr.id) 
end 
相關問題