ฉันจะเปิดการบันทึกการดีบัก SQL สำหรับ ActiveRecord ในการทดสอบ RSpec ได้อย่างไร


93

ฉันมีการทดสอบ RSpec สำหรับโมเดลของฉันและฉันต้องการเปิดการบันทึก SQL ActiveRecord เหมือนที่ฉันเห็นในโหมดเซิร์ฟเวอร์ Rails ต้องทำอย่างไร?

ฉันเริ่มการทดสอบด้วย

RAILS_ENV=test bundle exec rspec my/test_spec.rb

ขอบคุณ

คำตอบ:


54

ตามค่าเริ่มต้นแบบสอบถาม db ทั้งหมดของคุณจะถูกบันทึกไว้แล้วในโหมดทดสอบ พวกเขาจะเข้าlog/test.logมา


ฉันตั้งใจจะเห็นมันบนคอนโซล แต่นี่ก็ยุติธรรมพอแล้ว
lzap

21
คุณสามารถรับชมในคอนโซลโดยใช้tail -f log/test.log
idlefingers

346

คุณสามารถลองตั้งค่าตัวบันทึก ActiveRecord เป็น stdout ในการทดสอบของคุณที่ไหนสักแห่ง หากคุณใช้ rspec อาจอยู่ในตัวช่วยข้อมูลจำเพาะ?

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

3
มีประโยชน์มากขึ้นหากคุณกำลังทดสอบอัญมณีที่active_recordรวมไว้เท่านั้นเนื่องจากสิ่งเหล่านี้จะไม่บันทึก SQL ตามค่าเริ่มต้น
Brendon Muir

หากคุณใช้ IRuby (Jupyter for Ruby) STDOUTได้รับการแมปใหม่แล้วและคุณควรใช้$stdoutแทน
Ulysse BN

12

ชุด

config.log_level = :info 

ในสภาพแวดล้อมการทดสอบ


4
หรือตั้งค่าเป็น config.log_level =: debug เพื่อให้ได้ผลลัพธ์สูงสุดรวมถึงคำสั่ง SQL แต่ละคำสั่งที่เรียกใช้
Zack Xu

9

หากคำตอบอื่นไม่ได้ผลในกรณีของคุณโปรดตรวจสอบ 'ระดับบันทึก' ของสภาพแวดล้อมการทดสอบของคุณ

ค่าเริ่มต้นคือ 'debug' ซึ่งจะส่งออก SQL ที่สร้างโดย Rails หากตั้งค่าเป็น "ข้อมูล" SQL จะหายไป


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.