Für Schienen 4 siehe diese Antwort.
Konfigurieren Sie für Rails 3.x einen Logger in config/environments/test.rb
:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger::ERROR
Dadurch werden alle Fehler verschachtelt, die während des Tests in STDOUT protokolliert werden. Möglicherweise möchten Sie die Ausgabe an STDERR weiterleiten oder stattdessen eine andere Protokollebene verwenden.
Das Senden dieser Nachrichten sowohl an die Konsole als auch an eine Protokolldatei erfordert etwas Robusteres als die in Ruby integrierte Logger- Klasse. Das Protokollierungsjuwel macht, was Sie wollen. Fügen Sie es Ihrem hinzu Gemfile
und richten Sie dann zwei Appender ein 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
bootstrap.rb
der Logger-Instanz überschrieben wurde : github.com/rails/rails/blob/v4.2.4/railties/lib/rails/… The Log Level wurde wie folgt eingestellt:config.log_level = :ERROR
config.logger = Logger.new(STDOUT)
Ihresetup
Methode eingeben. Wenn Sie nur die Logger-Ausgabe für einen bestimmten Test benötigen, setzen Sieconfig.logger = Logger.new(STDOUT)
am Anfang des Tests. Dies funktioniert zumindest für MiniTest on Rails 5.0.1.ActiveSupport::Logger
statt nur verwendenLogger
. Ich habe gerade die Produktion abgebrochen, weil ich erwartet hatteRails.logger
, ein Objekt mit derActiveSupport::Logger
Schnittstelle zu sein, und in dev & test sind sie ...Rails.logger
stellt sich heraus, dass es sich tatsächlich um eineActiveSupport::Logger
ActiveSupport::TaggedLogging.new
Für Rails 4.x ist die Protokollstufe etwas anders konfiguriert als in Rails 3.x.
Fügen Sie dies hinzu
config/environment/test.rb
# Enable stdout logger config.logger = Logger.new(STDOUT) # Set log level config.log_level = :ERROR
Die Logger-Ebene wird in der Logger-Instanz unter
config.log_level
folgender Adresse festgelegt : https://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application/bootstrap.rb#L70Umgebungsvariable
Als Bonus können Sie das Überschreiben der Protokollebene mithilfe einer Umgebungsvariablen mit einem Standardwert wie dem folgenden zulassen:
# default :ERROR config.log_level = ENV.fetch("LOG_LEVEL", "ERROR")
Und dann Tests von der Shell ausführen:
# Log level :INFO (the value is uppercased in bootstrap.rb) $ LOG_LEVEL=info rake test # Log level :ERROR $ rake test
quelle
Tail das Protokoll als Hintergrundjob (&) und es verschachtelt mit rspec Ausgabe.
quelle
Eine Lösung, die mir gefällt, weil sie die rspec-Ausgabe von der tatsächlichen Schienenprotokollausgabe trennt, besteht darin, Folgendes zu tun:
$ tail -f $RAILS_APP_DIR/logs/test.log
odertail -f $RAILS_APP_DIR\logs\test.log
für Windows-Benutzer seinWenn Sie ein Multi-Pane-Terminal wie iTerm betreiben, macht dies noch mehr Spaß und Sie haben
rspec
und dietest.log
Ausgabe nebeneinander.quelle
Sie können in spec_helper.rb eine Methode definieren, die eine Nachricht sowohl an Rails.logger.info als auch an Puts sendet und zum Debuggen verwendet:
def log_test(message) Rails.logger.info(message) puts message end
quelle