2014-06-18 15 views
8

Nel mio file spec_helper, ho questa linea:Rspec non caricando i file di supporto

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

Eppure, quando corro RSpec, ricevo errori come:

undefined local variable or method `login_user' for RSpec::ExampleGroups::PostsController::POSTCreate::WhenSignedIn:Class 

La relativa funzione si trova in support/auth_macros , dove presumo sarebbe raccolto dall'istruzione require nel mio spec_helper. Qualche idea su cosa potrebbe succedere?

Il file in questione:

# support/auth_macros.rb 
module AuthMacros 
    def login_user 
    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
     @logged_in_user = FactoryGirl.create(:user, username: "logged_in") 
     sign_in @logged_in_user 
    end 
    end 

    def logout_user 
    before(:each) do 
     sign_out @logged_in_user 
    end 
    end 
end 
+0

è 'support/auth_macros.rb' - l'estensione è importante – BroiSatse

+0

Sì, è un file' rb'. – nullnullnull

+0

Puoi mostrarci questo file? – BroiSatse

risposta

7

Hai richiesto il file, ma il metodo è avvolto all'interno di un modulo. Devi rimuovere il modulo di wrapping o includerlo nel tuo test di gruppo.

Aggiornamento:

di essere al 100% specifica: require carica il file e fare nient'altro. Dopo aver richiesto il file, il modulo è stato creato, ma non è incluso. È necessario includerlo con: include AuthMacros

+0

Nel mio test di gruppo, ho bisogno di 'spec_helper'', che a sua volta ha richiesto il modulo. Sfortunatamente, anche quando richiedo direttamente "supporto/auth_macros", questo errore persiste. – nullnullnull

+0

@timothycommoner - Aggiornamento della domanda in modo che sia più chiaro. – BroiSatse

+0

Ah, ora vedo. Sembra che sia stato esteso attraverso la configurazione: 'config.extend ControllerMacros,: type =>: controller'. Sono andato avanti e rimosso quella linea e poi ho preso le funzioni dal loro modulo. L'errore che stavo vivendo rimase, ma apparvero nuovi errori nelle specifiche del mio controller, come "metodo non definito 'get'' e' metodo non definito' post''. Per impostazione predefinita, le specifiche del controller hanno accesso a questi metodi, giusto? Quindi forse c'è un problema più profondo qui. Qualche idea o dovrei aprire una nuova domanda? – nullnullnull

Problemi correlati