Jak włączyć rejestrowanie debugowania SQL dla ActiveRecord w testach RSpec?

93

Mam kilka testów RSpec dla moich modeli i chciałbym włączyć rejestrowanie SQL ActiveRecord, tak jak widzę w trybie serwera Rails. Jak to zrobić?

Zaczynam testy od

RAILS_ENV=test bundle exec rspec my/test_spec.rb

Dzięki

lzap
źródło

Odpowiedzi:

54

Domyślnie wszystkie zapytania dotyczące bazy danych będą rejestrowane już w trybie testowym. Będą w środku log/test.log.

bezczynni
źródło
Ach, chciałem to zobaczyć na konsoli. Ale to wystarczy.
lzap
21
Możesz to obejrzeć na konsoli za pomocątail -f log/test.log
idlefingers
346

Możesz spróbować ustawić rejestrator ActiveRecord na stdout w swoim teście. Jeśli używasz rspec, może w pomocniku specyfikacji?

ActiveRecord::Base.logger = Logger.new(STDOUT)
Jerzy
źródło
3
O wiele bardziej przydatne, jeśli testujesz klejnot tylko z active_recorddołączonym, ponieważ domyślnie nie rejestrują one kodu SQL.
Brendon Muir,
Jeśli używasz IRuby (Jupyter for Ruby), STDOUTzostał zmieniony i powinieneś użyć $stdoutzamiast tego.
Ulysse BN
12

zestaw

config.log_level = :info 

w środowisku testowym

Nicolai
źródło
4
lub ustaw na config.log_level =: debug, aby uzyskać maksymalne wyniki, w tym każdą wykonaną instrukcję SQL
Zack Xu
9

jeśli inne odpowiedzi nie działają w Twoim przypadku, sprawdź „poziom dziennika” swojego środowiska testowego.

jego domyślną wartością jest „debug”, który wyświetli kod SQL wygenerowany przez Railsy. jeśli była ustawiona na „info”, nie będzie kodu SQL.

Siwei Shen 申思维
źródło
1

W twoim test.rb:

Rails.application.configure do
  ...
  config.logger = ActiveSupport::Logger.new(STDOUT)
end
Pere Joan Martorell
źródło