2015-07-14 25 views
7

Bir Ruby on Rails uygulaması oluşturuyorum ve "Beni hatırla" özelliğinin çalışıp çalışmadığını görmek için Kullanıcı modelimin kullanıldığı bir testi çalıştırmaya çalışıyorum. Çerezleri saklamak için cookies karma değerinde Rails 'in kullanıyorum ve mevcut oturumu saklamak için session hash. Ben session değişkenini kullandığım çeşitli testler (entegrasyon, model ve kontrolör) çalıştırıyorum, ancak bu durumda bir nedenden dolayı tanınmıyor.Model testinde tanımlanmamış yerel değişken veya yöntem 'oturumu'

NameError: undefined local variable or method `session' for #<UserTest:0x0000000658b5c8> 

hata aşağıda log_in_as yöntemde else blokta olur: Benim Kullanıcı testinde log_in_as diyoruz

test_helper.rb

... 

def log_in_as(user, options = {}) 
    password = options[:password] || 'password' 
    remember_me = options[:remember_me] || '1' 

    if integration_test? 
    post login_path, session: { email: user.email, password: password, remember_me: remember_me } 
    else 
    session[:user_id] = user.id 
    end 
end 

; Bu testlerin her ikisi de başarısız.

require 'test_helper' 
... 
test "login with remembering" do 
    log_in_as(@user, remember_me: '1') 
    assert_not_nil cookies['remember_token'] 
end 

test "login without remembering" do 
    log_in_as(@user, remember_me: '0') 
    assert_nil cookies['remember_token'] 
end 
... 

user_test.rb

Ve yardımcı kod satırını kaldırdığınızda bir hata cookies tanınmadığı söyleyerek atılır. Burada sorun nedir?

+1

Bu SO yanıtına bakın http://stackoverflow.com/questions/7216847/setting-a-session-variable-in-a-model. Temel olarak, bu özel hashlara doğrudan modelinizde erişemezsiniz. –

+0

Bu testte bile böyle mi oluyor? Bu dosyalar "test/test_helper.rb" ve "test/models/user_test.rb" adreslerinde bulunur. Ben bir kullanıcı oturum açmış olup olmadığını görmek için bu yardımcı yöntemi gibi aslında 'test_helper.rb' oturumuna başka çağrıları var: '! Session [: user_id] .nil?' – sarangj

cevap

6

hash isn't available in models, only in controllers and views ve denetimleri ve testleri görüntüleyin.

+0

Ah, anlıyorum, ama bu kod Test paketinde ... Bu hala geçerli mi? Ayrıca, "test_helper.rb" dosyasındaki oturum karmalarını çağırıyorum. (ana soruya yanıt yorumuma bakın) – sarangj

+0

Evet. Kontrolörler ve görünümlerde mevcut ** sadece ** ve kontrolör ve test testleri. – p4sh4

İlgili konular