RSpec testlerinde ActiveRecord için SQL hata ayıklama günlüğünü nasıl etkinleştiririm?


93

Modellerim için bazı RSpec testlerim var ve Rails sunucu modunda gördüğüm gibi SQL ActiveRecord günlük kaydını açmak istiyorum. Bu nasıl yapılır?

Testlerime şununla başlıyorum

RAILS_ENV=test bundle exec rspec my/test_spec.rb

Teşekkürler

Yanıtlar:


55

Varsayılan olarak, tüm db sorgularınız zaten test modunda kaydedilecektir. İçeride olacaklar log/test.log.


Ah, konsolda görmek istedim. Ama bu yeterince adil.
lzap

22
tail -f log/test.log
Şunu

Bunun bu kadar kolay olduğunu fark etmedim, bu yüzden ActiveSupport'tan tüm enstrümanları atmak için bir satır ekledim:ActiveSupport::Notifications.subscribe do |*args| puts *args end
Vajk Hermecz

347

ActiveRecord logger'ı testinizde bir yerde standart çıkışa ayarlamayı deneyebilirsiniz. Rspec kullanıyorsanız, belki özellik yardımcısında?

ActiveRecord::Base.logger = Logger.new(STDOUT)

3
Yalnızca active_recorddahil edilen bir cevheri test ediyorsanız çok daha yararlıdır , çünkü bunlar varsayılan olarak SQL'i kaydetmez.
Brendon Muir

IRuby (Ruby için Jupyter) kullanıyorsanız, STDOUTyeniden eşlenmiştir ve $stdoutbunun yerine kullanmanız gerekir .
Ulysse BN

12

Ayarlamak

config.log_level = :info 

test ortamında


4
veya bunu config.log_level = olarak ayarlayın: çalıştırılan her SQL ifadesi dahil maksimum çıktı almak için hata ayıklayın
Zack Xu

9

Sizin durumunuzda diğer yanıtlar işe yaramazsa, lütfen test ortamınızın 'günlük düzeyini' kontrol edin.

varsayılanı, Rails tarafından oluşturulan SQL'i çıkaracak olan 'hata ayıklama'dır. "bilgi" olarak ayarlanmışsa, SQL eksik olacaktır.


1

İçinde test.rb:

Rails.application.configure do
  ...
  config.logger = ActiveSupport::Logger.new(STDOUT)
end
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.