Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ทางลัดเพื่อดูความล้มเหลวขั้นต่ำของคุณทันที

คุณกำลังจะตรวจสอบคุณลักษณะเล็กๆ ถัดไปของคุณ ดังนั้นคุณจึงเริ่มต้นการทดสอบการผสานรวมอย่างเต็มรูปแบบ คุณรอและรอเมื่อจุดต่างๆ เต็มหน้าจอของคุณ จนถึง…

......FF....

:-(

คุณยังมีเวลาอีกสองสามนาทีก่อนที่การทดสอบจะเสร็จสิ้น แต่ถ้าคุณออกจากการทดสอบก่อนกำหนด คุณจะ ไม่รู้ การทดสอบใดล้มเหลว

คุณต้องรอจนกว่าการวิ่งทั้งหมดจะจบลงจริงๆ หรือไม่ คุณจึงจะเห็นความล้มเหลวเหล่านั้น

กด Ctrl-T เพื่อช่วยชีวิต!

หากคุณใช้ Mac มีวิธีดูการทดสอบที่ล้มเหลวตั้งแต่เนิ่นๆ:

กด Ctrl-T ในขณะที่การทดสอบของคุณกำลังทำงาน

เมื่อดำเนินการแล้ว คุณจะเห็นว่ากรณีทดสอบใดกำลังทำงานอยู่ และใช้งานได้นานแค่ไหน หากการทดสอบใดๆ ล้มเหลว คุณจะเช่นกัน ดูความล้มเหลวเหล่านั้น เพื่อให้คุณได้เริ่มต้นแก้ไขก่อนดำเนินการครั้งต่อไป!

นอกจากนี้ยังสะดวกมากสำหรับการดีบักการทดสอบที่เพิ่งหยุดทำงาน Ctrl-T จะบอกคุณว่าการทดสอบใด กำลังพยายาม เพื่อให้คุณสามารถแยกการทดสอบนั้นและแก้ไขได้

สุดท้ายนี้ ฉันได้สร้างนิสัยในการกดปุ่ม Ctrl-T ทุกครั้งที่การทดสอบใช้เวลานานอย่างเห็นได้ชัด (เช่น วินาทีหรือนานกว่านั้น) กว่าจะเสร็จสิ้น มันชี้ให้เห็นถึงการทดสอบที่ช้ามากมายที่ฉันต้องทำให้เร็วขึ้น

Ctrl-T ทำงานอย่างไร

สำหรับ Mac Ctrl-T ส่งข้อความหรือสัญญาณที่เรียกว่า INFO , ไปยังโปรแกรมใดก็ตามที่ทำงานอยู่:

signal_test.rb
puts "Starting..."
trap("INFO") { puts "INFO triggered!" }

loop { print "."; sleep 0.1}
~/Source jweiss$ ruby signal_test.rb
Starting...
........^Tload: 7.14  cmd: ruby 6121 running 0.10u 0.08s
INFO triggered!
.......^Tload: 7.14  cmd: ruby 6121 running 0.10u 0.08s
INFO triggered!
................^Tload: 11.77  cmd: ruby 6121 running 0.10u 0.08s
.INFO triggered!
......^Csignal_test.rb:5:in `sleep': Interrupt
	from signal_test.rb:5:in `block in <main>'
	from signal_test.rb:5:in `loop'
	from signal_test.rb:5:in `<main>'

Minitest รู้เกี่ยวกับ INFO และตอบกลับโดยพิมพ์ข้อมูลเกี่ยวกับการทดสอบ:

~/Source/rails/activesupport[master] jweiss$ be rake
/usr/local/Cellar/ruby/2.2.0/bin/ruby -w -I"lib:test"  "/usr/local/Cellar/ruby/2.2.0/lib/ruby/2.2.0/rake/rake_test_loader.rb" "test/**/*_test.rb" 
Run options: --seed 33445

# Running:

.................F........^Tload: 1.62  cmd: ruby 29646 running 4.37u 1.40s
Current results:


  1) Failure:
CleanLoggerTest#test_format_message [/Users/jweiss/Source/rails/activesupport/test/clean_logger_test.rb:13]:
Expected "error\n" to not be equal to "error\n".



Current: DigestUUIDExt#test_invalid_hash_class 0.02s
............................

สวยดี!

เมื่อรู้ว่าสิ่งนี้เป็นไปได้ คุณอาจนึกถึงวิธีที่แอปอื่นๆ สามารถจัดการกับ INFO :

  • Rails สามารถแสดงการทำงานของคอนโทรลเลอร์ที่กำลังทำงานอยู่หรือสถิติประสิทธิภาพบางอย่างได้
  • Sidekiq สามารถบอกคุณได้ว่าคนงานแต่ละคนกำลังทำอะไร คุณจึงเห็นว่าพวกเขาติดขัดตรงไหน

และ Sidekiq เคยใช้ INFO เพื่อพิมพ์ backtrace ของแต่ละเธรดที่รัน แต่เพราะว่า INFO ไม่รองรับบน Linux, Sidekiq เปลี่ยนเป็นสัญญาณอื่น น่าเสียดายที่สัญญาณนั้นไม่สามารถเรียกใช้ด้วยแป้นพิมพ์ลัดแบบ INFO ได้

เพราะ INFO ไม่พร้อมใช้งานบน Linux (และบางคนอาจบอกว่าใช้ INFO วิธีนี้ไม่ถูกต้องทั้งหมด) พฤติกรรมนี้ไม่แพร่หลายเท่าที่ควร

ถึงกระนั้น เป็นความช่วยเหลือเพิ่มเติมเล็กน้อยที่อาจเป็นประโยชน์ในสถานการณ์ต่างๆ มากมาย หากคุณกำลังสร้างแอป ควรพิจารณาว่าข้อความสถานะประเภทใดที่คุณสามารถแสดงตามความต้องการต่อผู้ที่สนใจได้