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