Bagaimana cara mengaktifkan logging debug SQL untuk ActiveRecord di tes RSpec?

93

Saya memiliki beberapa tes RSpec untuk model saya dan saya ingin mengaktifkan logging SQL ActiveRecord seperti yang saya lihat dalam mode server Rails. Bagaimana cara melakukannya?

Saya memulai tes saya dengan

RAILS_ENV=test bundle exec rspec my/test_spec.rb

Terima kasih

lzap
sumber

Jawaban:

54

Secara default, semua kueri db Anda akan dicatat dalam mode uji. Mereka akan masuk log/test.log.

orang yang menganggur
sumber
Ah, aku ingin melihatnya di konsol. Tapi ini cukup adil.
lzap
21
Anda dapat menontonnya di konsol menggunakantail -f log/test.log
idlefingers
346

Anda dapat mencoba menyetel pencatat ActiveRecord ke stdout dalam pengujian Anda di suatu tempat. Jika Anda menggunakan rspec, mungkin di helper spesifikasi?

ActiveRecord::Base.logger = Logger.new(STDOUT)
George
sumber
3
Jauh lebih membantu jika Anda menguji permata dengan hanya active_recorddisertakan karena ini tidak mencatat SQL secara default.
Brendon Muir
Jika Anda menggunakan IRuby (Jupyter untuk Ruby), STDOUTtelah dipetakan ulang, dan Anda harus menggunakannya $stdout.
Ulysse BN
12

set

config.log_level = :info 

di lingkungan pengujian

Nicolai
sumber
4
atau setel ke config.log_level =: debug untuk mendapatkan output maksimum, termasuk setiap pernyataan SQL yang dijalankan
Zack Xu
9

jika orang lain menjawab tidak berfungsi dalam kasus Anda, periksa 'tingkat log' lingkungan pengujian Anda.

defaultnya adalah 'debug', yang akan menampilkan SQL yang dihasilkan oleh Rails. jika disetel ke "info", SQL akan hilang.

Siwei Shen 申思维
sumber
1

Di Anda test.rb:

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