2013-04-18 33 views
1

我正在寫一些請求規格(rspec 2.13.1)並且想直接訪問會話散列。我認爲這是控制器規格中可能的語法,但不確定這是否可以在請求規格中完成。Rspec請求規格和會話值

describe 'Api' do 
    let(:user) { FactoryGirl.create(:user) } 
    session[:auth_token]=user.auth_token 

我得到以下錯誤:

Failure/Error: session[:auth_token]=user.auth_token        │lock (2 levels) in top_level'               
NoMethodError:                 │/Users/jt/.rvm/gems/ruby-1.9.3-p392/gems/rake-10.0.4/lib/rake/application.rb:101:in `e 
    undefined method `session' for nil:NilClass         │ach'                     
# ./spec/requests/api_spec.rb:7:in `block (2 levels) in <top (required)>' 

我已經看到了以下問題Access session hash in request spec但不知道這是否是準確的。提前

THX

+0

測試代碼是複製粘貼錯誤嗎?你在測試塊內沒有'session'行。 –

回答

1

有一些小的失誤

  1. 您應該描述api_controller
  2. 的請求變量賦值應該是一個前內(:每個)塊。
  3. 而是缺乏一個it
  4. 當文件不放置規格/控制器中,你需要指定,它與:type => :controller

這裏控制器測試就是一個很好的例子:

require 'spec_helper' 

describe ApiController, :type => :controller do 
    let(:user) { FactoryGirl.create(:user) } 

    before :each do 
    session[:auth_token]=user.auth_token 
    end 

    it 'should do something' do 
    get :index 
    response.status.should_not eq 401 
    end 
end 
+0

「2.變量賦值爲」......爲了什麼? –

+0

@GrantBirchmeier似乎在列表中有不幸的換行符。調整。謝謝。 – scones

+0

我有疑問:爲什麼你設置爲':type => controller'?它不能是':type => request'? –