2011-11-07 21 views
9

我正在測試我的控制器使用Rspec,我似乎無法設置要測試的當前控制器的會話變量之前請求的路徑。 例如這個工程:Rspec 2.7訪問控制器會話在提出請求之前spec

describe "GET /controller/path" do 
    it "if not matching CRSF should display message" do 
     get controller_path 

     request.session[:state] = "12334" 
    end 
    end 

這並不工作(我得到一個錯誤說會話不是無類的方法):

 describe "GET /controller/path" do 
     it "if not matching CRSF should display message" do 
      request.session[:state] = "12334" 
      get controller_path 
     end 
     end 

任何想法?

回答

6

試試這個:

describe "GET /controller/path" do 
    it "if not matching CRSF should display message" do 
     session[:state] = "12334" 
     get controller_path 
    end 
    end 
9

使用RSpec的新版本,這是做得相當不錯的,看:

describe SessionController do 
    # routes are mapped as: 
    # match 'login' => 'session#create' 
    # get 'logout' => 'session#destroy' 

    describe "#create" do 
    context "with valid credentials" do 
     let :credentials do 
     { :email => '[email protected]', :password => 'secret' } 
     end 

     let :user do 
     FactoryGirl.create(:user, credentials) 
     end 

     before :each do 
     post '/login', credentials 
     end 

     it "creates a user session" do 
     session[:user_id].should == user.id 
     end 
    end 

    # ... 
    end 

    describe "#destroy" do 
    context "when user logged in" do 
     before :each do 
     get "/logout", {}, { :user_id => 123 } # the first hash is params, second is session 
     end 

     it "destroys user session" do 
     session[:user_id].should be_nil 
     end 

     # ... 
    end 
    end 
end 

您也可以使用簡單的request.session[:user_id] = 123before(:each)塊,但上面看起來很漂亮。

+1

如果它在2016年的工作) 有一個錯誤在此檢查 它應該驗證用戶「不要指望 (會話[:USER_ID])到EQ(user.id) 結束 –

相關問題