2012-12-19 15 views
5

sto usando il seguente trucco (da http://mikbe.tk/2011/02/10/blazingly-fast-tests/) al fine di garantire modelli vengono ricaricati ad ogni RSpec eseguito con Spork:costanti ridefinito con Spork

Spork.each_run do 
    load "#{Rails.root}/config/routes.rb" 
    Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f } 
    # ..... 
end 

Tuttavia esso provoca i seguenti avvisi ogni volta che ho eseguito i miei test:

/myproject/app/models/model.rb:36: warning: already initialized constant CONFIGURABLE

che posso evitare mettendo:

if !defined?(A_CONSTANT)

dopo ogni costante, che non sembra proprio corretta (ma funziona). Qualche suggerimento su come posso farlo funzionare correttamente? (cioè i miei modelli continueranno a ricaricarsi nei test, ma non devo inserire lo if dopo ogni definizione costante.)

+0

Non sono sicuro esattamente il tuo problema con avvisi, ma ho cercato nel test delle prestazioni anche nelle suite di test RSpec, quindi potresti trovare [questa risposta StackOverflow] (http://stackoverflow.com/a/12215946/567863) di riferimento per il tuo file ** spec_helper.rb **. –

+1

Ho visto che questo si verifica quando dichiari una costante con lo stesso nome, ma all'interno di una specifica piuttosto che del tuo codice di produzione. –

risposta

0

utilizzando "load" causerà il ricaricamento del file, e ciò significa che quel file ha costanti definite, quelle costanti saranno ridefinite ogni volta che viene caricato. L'uso di "require" anziché di carico è solitamente preferito in quanto evita questo problema non ricaricando un file se è già stato caricato.

Tuttavia, chiaramente si vuole ricaricare i file in tutto il mondo di prova, così da poter eliminare gli avvisi, mentre facendo quel carico:

Spork.each_run do 
    Kernel.silence_warnings do 
    load "#{Rails.root}/config/routes.rb" 
    Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f } 
    # ..... 
    end 
end 
Problemi correlati