Wie aktiviere ich die SQL-Debug-Protokollierung für ActiveRecord in RSpec-Tests?

92

Ich habe einige RSpec-Tests für meine Modelle und möchte die SQL ActiveRecord-Protokollierung aktivieren, genau wie ich es im Rails-Servermodus sehe. Wie geht das?

Ich beginne meine Tests mit

RAILS_ENV=test bundle exec rspec my/test_spec.rb

Vielen Dank

lzap
quelle

Antworten:

55

Standardmäßig werden alle Ihre Datenbankabfragen bereits im Testmodus protokolliert. Sie werden in sein log/test.log.

Leerlauffinger
quelle
Ah, ich wollte es auf der Konsole sehen. Das ist aber fair genug.
lzap
21
Sie können es in einer Konsole mittail -f log/test.log
Idlefingers
341

Sie können versuchen, den ActiveRecord-Logger in Ihrem Test irgendwo auf stdout zu setzen. Wenn Sie rspec verwenden, vielleicht im Spezifikationshelfer?

ActiveRecord::Base.logger = Logger.new(STDOUT)
George
quelle
3
Viel hilfreicher, wenn Sie ein Juwel testen, das nur active_recordenthalten ist, da diese die SQL standardmäßig nicht protokollieren.
Brendon Muir
Wenn Sie IRuby (Jupyter für Ruby) verwenden, STDOUTwurde es neu zugeordnet, und Sie sollten es $stdoutstattdessen verwenden.
Ulysse BN
12

einstellen

config.log_level = :info 

in der Testumgebung

Nicolai
quelle
4
oder setzen Sie es auf config.log_level =: debug, um die maximale Ausgabe zu erhalten, einschließlich jeder ausgeführten SQL-Anweisung
Zack Xu
9

Wenn andere Antworten in Ihrem Fall nicht funktionieren, überprüfen Sie bitte die Protokollstufe Ihrer Testumgebung.

Die Standardeinstellung ist "Debug", wodurch die von Rails generierte SQL ausgegeben wird. Wenn es auf "info" gesetzt wurde, fehlt die SQL.

Siwei Shen 申思维
quelle
1

In Ihrem test.rb:

Rails.application.configure do
  ...
  config.logger = ActiveSupport::Logger.new(STDOUT)
end
Pere Joan Martorell
quelle