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

Antworten:


55

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


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)

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


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.


1

In Ihrem test.rb:

Rails.application.configure do
  ...
  config.logger = ActiveSupport::Logger.new(STDOUT)
end
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.