2015-07-14 22 views
7

Tworzę aplikację Ruby on Rails i próbuję uruchomić test z udziałem mojego modelu użytkownika, aby sprawdzić, czy działa funkcja "Zapamiętaj mnie". Używam wbudowanej funkcji Rails 'cookies do przechowywania plików cookie, a mieszania session do przechowywania bieżącej sesji. Przeprowadziłem różne testy (integracja, model i kontroler), w których używam zmiennej session, ale z jakiegoś powodu w tym konkretnym przypadku nie jest ona rozpoznawana.Niezdefiniowana zmienna lokalna lub metoda "sesja" w teście modelu

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

Błąd dzieje się w bloku else w metodzie poniżej log_in_as:

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 

Wzywam log_in_as w moim teście Użytkownika; oba te testy zawodzą.

user_test.rb

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 
... 

I kiedy usunąć ten wiersz kodu z pomocnika, zostanie zgłoszony błąd mówiąc, że cookies nie jest rozpoznawany. Jaki jest problem?

+1

Zobacz tę odpowiedź na stronie http://stackoverflow.com/questions/7216847/setting-a-session-variable-in-a-model. Zasadniczo nie masz dostępu do tych specjalnych skrótów bezpośrednio w swoich modelach. –

+0

Czy tak jest nawet w teście? Pliki te znajdują się w 'test/test_helper.rb' i' test/models/user_test.rb'. Mam inne wywołania sesji w 'test_helper.rb' w rzeczywistości, tak jak ta metoda pomocnika, aby sprawdzić, czy użytkownik jest zalogowany: '! Sesja [: identyfikator_użytkownika] .nil? ' – sarangj

Odpowiedz

6

Testy mieszania session i kontrolera i widoku.

+0

Ah, widzę, ale ten kod jest w pakiecie testowym ... Czy to nadal ma zastosowanie? Mam również wywołania skrótu sesji w pliku 'test_helper.rb'. (odwołać się do mojego komentarza dotyczącego odpowiedzi na pytanie główne) – sarangj

+0

Tak. Dostępne ** tylko ** w kontrolerach i widokach oraz kontroler i przeglądanie testów. – p4sh4

Powiązane problemy