2015-07-14 7 views
7

Sto creando un'applicazione Ruby on Rails e sto tentando di eseguire un test che coinvolge il mio modello Utente per verificare se la funzione "Ricordami" funziona. Uso l'hash incorporato di Rails cookies per memorizzare i cookie e l'hash session per memorizzare la sessione corrente. Ho eseguito vari test (integrazione, modello e controller) in cui utilizzo la variabile session, ma per qualche motivo in questo caso particolare non viene riconosciuta.Variabile locale non definita o metodo 'sessione' nel test del modello

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

L'errore si verifica nel blocco else nel metodo log_in_as di seguito:

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 

chiamo log_in_as nel mio test per l'utente; entrambi questi test falliscono.

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

E quando rimuovo che riga di codice dal aiutante, viene generato un errore dicendo che cookies non viene riconosciuto. Qual è il problema qui?

+1

Vedere questa risposta SO http://stackoverflow.com/questions/7216847/setting-a-session-variable-in-a-model. Fondamentalmente, non hai accesso a questi hash speciali direttamente nei tuoi modelli. –

+0

È così anche in una prova? Questi file si trovano in 'test/test_helper.rb' e' test/models/user_test.rb'. Ho altre chiamate alla sessione in 'test_helper.rb', infatti, come questo metodo di supporto per vedere se un utente è loggato: '! Sessione [: user_id] .nil? ' – sarangj

risposta

6

Il session hash isn't available in models, only in controllers and views e controller e visualizzare i test.

+0

Ah, capisco, ma questo codice è nella suite di test ... Vale ancora? Inoltre, ho chiamate sull'hash della sessione all'interno del file 'test_helper.rb'. (consultare il mio commento di risposta alla domanda principale) – sarangj

+0

Sì. Disponibile ** solo ** in controller e viste e test del controller e vista. – p4sh4

Problemi correlati