2013-12-09 1 views
6

私はRSpecのと機能の仕様を書いて、ログイン手順を毎回スキップしたいよログインしてテストしています。ユーザーはomniauth(なし工夫)を介して認証され、session[:user]変数が設定され、その後、参照してログインしたままにするために、私は直接、可能な場合はセッション変数を設定することができるようにしたい:。Railsは、ユーザ(未定義のメソッド「セッション」)

require 'spec_helper' 

describe "My page" do 
    it "has what I want on it when logged in" do 
    user = FactoryGirl.create(:user) 
    session[:user] = user.id 
    visit my_path 
    page.should have_content "Foobar" 
    end 
end 

が、これは

を与えます
Failure/Error: session[:user] = user.id 
NameError: 
    undefined local variable or method `session' for #<RSpec::Core::ExampleGroup::Nested_1:0x007fd13456d170> 

私はテストのほとんどでログイン手順を避けることができるように直接セッション変数を設定する方法はありますか?

答えて

9

rack_session_access宝石がうまく動作するようです: https://github.com/railsware/rack_session_access

それを使用すると、テストは次のようになります。

require 'spec_helper' 

describe "My page" do 
    it "has what I want on it when logged in" do 
    user = FactoryGirl.create(:user) 
    page.set_rack_session(user: user.id) 
    visit my_path 
    page.should have_content "Foobar" 
    end 
end 
-1

これは、コントローラの仕様だった場合は、次のように、あなたはログインをシミュレートすることができます:

How do I simulate a login with RSpec?に示すよう
request.session[user_id] = user.id 

。しかし、これは機能仕様なので、私はセッションを直接設定することはできないと考えています。

+0

私はこれを試してみましたが、それは同じエラーを投げ、唯一の未定義のメソッドではなく、「セッション」の「要求」であることと – tyler

+0

ああ、申し訳ありません私はちょうどあなたが_feature_スペックを述べ気づきました。私は上記の_controller_スペックを意図していると信じています。私はあなたが機能仕様から直接セッションを更新できるとは思わない。 –