2015-08-15 12 views
5

Ho un file di supporto in app/helpers/sessions_helper.rb che include un metodo my_preference che restituisce la preferenza dell'utente attualmente connesso. Mi piacerebbe avere accesso a quel metodo in un test di integrazione. Ad esempio, in modo da poter utilizzare get user_path(my_preference) nei miei test.Come rendere disponibili i metodi di supporto in un test di integrazione di Rails?

In altri post ho letto questo è possibile includendo require sessions_helper nel file di test, ma ho ancora l'errore NameError: undefined local variable or method 'my_preference'. Che cosa sto facendo di sbagliato?

require 'test_helper' 
require 'sessions_helper' 

class PreferencesTest < ActionDispatch::IntegrationTest 

    test "my test" do 
    ... 
    get user_path(my_preference) 
    end 

end 

risposta

7

tuo messagae errore dice:

NameError: undefined local variable or method 'my_preference' 

che significa che non si ha accesso a my_preference metodo. Per renderlo disponibile nella tua classe, devi avere il modulo include nella tua classe.

È necessario includere il modulo: SessionsHelper nella classe PreferencesTest.

include SessionsHelper 

Poi, il metodo di istanza my_preference sarà disponibile per l'utilizzo nel test.

Quindi, si vuole fare:

require 'test_helper' 
require 'sessions_helper' 


class PreferencesTest < ActionDispatch::IntegrationTest 

    include SessionsHelper 

    test "my test" do 
    ... 
    get user_path(my_preference) 
    end 

end 
+0

Grazie, funziona! Ora sembra funzionare anche se non mi occupo di 'require 'sessions_helper''. Ha senso? È necessario 'require 'sessions_helper''? – Marty

+0

sì, non dovresti averne bisogno se è nella directory 'app/helpers' fammi sapere! –

1

Nel caso in cui qualcuno vuole avere particolari metodi di supporto disponibili in tutti i test, è possibile includere i moduli di supporto nel file test_helper.rb:

class ActiveSupport::TestCase 
... 
include SessionsHelper 
end