2013-12-09 20 views
6

rspec ile özellik özelliklerine yazıyorum ve her seferinde giriş adımını atlamak istiyorum. Kullanıcılar omniauth (hayır vasiyetle) üzerinden doğrulanır ve bir session[:user] değişken ayarlanır ve daha sonra başvurulan Bağlı kalmak istediğin doğrudan mümkünse oturum değişkeni ayarlamak mümkün istiyorum.Raylar, oturum açmış kullanıcı ile test özelliğini (undefined method 'session') içeriyor

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 

ama bu

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

Oturum değişkenini doğrudan ayarlamak için herhangi bir yol var mı, bu sayede testlerin çoğunda oturum açma adımını engelleyebilir miyim?

cevap

9

rack_session_access mücevher iyi iş gibi görünüyor: Bununla beraber https://github.com/railsware/rack_session_access

test olur: Bu bir kontrolör Spec olsaydı şöyle

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

, bir kullanıcı adı etkisi yaratabilir:

How do I simulate a login with RSpec?'da belirtildiği gibi
request.session[user_id] = user.id 

. Ancak, bu özellik bir özellik olduğu için, oturumun doğrudan mümkün olduğuna inanmıyorum.

+0

Bunu denedim ve aynı hatayı attı, yalnızca tanımlanmamış yöntemle 'session' yerine 'request' olmak yerine – tyler

+0

Oh, üzgünüm sadece _feature_ specs dediğini fark ettim. Yukarıdakilerin _controller_ özellikleri için tasarlandığını düşünüyorum. Oturumu doğrudan özellik özelliklerinden güncelleyebileceğinize inanmıyorum. –

İlgili konular