2012-08-02 12 views

risposta

44

per Rails 4, vedere this answer.

per Rails 3.x, configurare un logger in config/environments/test.rb:

config.logger = Logger.new(STDOUT) 
config.logger.level = Logger::ERROR 

Ciò interleave eventuali errori che vengono registrati durante i test su STDOUT . Si potrebbe desiderare di indirizzare l'output a STDERR o utilizzare un diverso livello di registro.

L'invio di questi messaggi sia alla console e un file di log richiede qualcosa di più robusto di built-in Logger classe di Ruby. La gemma logging farà quello che vuoi. Aggiungerlo al tuo Gemfile, quindi impostare due appenders in config/environments/test.rb:

logger = Logging.logger['test'] 
logger.add_appenders(
    Logging.appenders.stdout, 
    Logging.appenders.file('example.log') 
) 
logger.level = :info 
config.logger = logger 
+0

Per rails 4.2.1, ho dovuto impostare il livello di log nella configurazione, poiché veniva sovrascritto in 'bootstrap.rb' sull'istanza del logger: https://github.com/rails/rails/blob/v4. 2.4/railties/lib/rails/application/bootstrap.rb # L70 Il livello di log è stato impostato in questo modo: 'config.log_level =: ERROR' – tommes

+0

@tommes puoi postare un'altra risposta con il nome esatto del file e il codice che hai aggiunto? Modificherò la mia risposta per specificare che è per Rails 3.x. –

+0

fatto! http://stackoverflow.com/a/32628272/1308089 – tommes

7

È possibile definire un metodo in spec_helper.rb che invia un messaggio sia ai Rails.logger.info e mette e l'uso che per il debug:

def log_test(message) 
    Rails.logger.info(message) 
    puts message 
end 
+1

speravo in qualcosa di esterno a chiamare Rails.logger.info perché io uso Rails.logger.info, Rails.logger.debug, ecc nel mio codice di produzione. grazie per aver risposto – s12chung

+0

Vedo. Ma perché questo ti impedisce di usare Rails.logger nei tuoi test? – manglewood

+0

Lo uso anche nei miei test. Sarebbe bello avere tutto stampato su stdout, invece di usare tail. – s12chung

18

Una soluzione che mi piace, perché mantiene rspec un'uscita separata da rotaie effettivi output del log, è quello di effettuare le seguenti operazioni:

  • Aprire una seconda finestra di terminale o sulla scheda, e organizzare in modo che si può vedere sia il terminal principale si sta eseguendo rspec come pure la nuovo.
  • Eseguire un comando di coda nella seconda finestra in modo da visualizzare i binari all'interno dell'ambiente di test. Per impostazione predefinita, questo può essere come $ tail -f $RAILS_APP_DIR/logs/test.log o tail -f $RAILS_APP_DIR\logs\test.log per gli utenti di Window
  • scorrere le suite RSpec

Se si esegue un terminale multi-riquadro come iTerm, questo diventa ancora più divertente e si ha rspec e la test.log uscita fianco a fianco.

26

Coda il registro come background job (&) e si interporrà con l'output di rspec.

tail -f log/test.log & 
bundle exec rspec 
+4

Questa è una soluzione accurata. – Gal

44

Per Rails 4.x il livello di registrazione è configurato un po 'diverso rispetto a Rails 3.x

Aggiungi questo al config/environment/test.rb

# Enable stdout logger 
config.logger = Logger.new(STDOUT) 

# Set log level 
config.log_level = :ERROR 

Il livello logger è impostato sull'istanza logger da config.log_level a: https://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application/bootstrap.rb#L70

Ambiente variabile

Come bonus, è possibile consentire la sovrascrittura il livello di registro utilizzando una variabile di ambiente con un valore predefinito come questo:

# default :ERROR 
config.log_level = ENV.fetch("LOG_LEVEL", "ERROR") 

E poi i test che va dal guscio:

# Log level :INFO (the value is uppercased in bootstrap.rb) 
$ LOG_LEVEL=info rake test 

# Log level :ERROR 
$ rake test 
Problemi correlati