คุณกำลังจะตรวจสอบคุณลักษณะเล็กๆ ถัดไปของคุณ ดังนั้นคุณจึงเริ่มต้นการทดสอบการผสานรวมอย่างเต็มรูปแบบ คุณรอและรอเมื่อจุดต่างๆ เต็มหน้าจอของคุณ จนถึง…
......FF....
:-(
คุณยังมีเวลาอีกสองสามนาทีก่อนที่การทดสอบจะเสร็จสิ้น แต่ถ้าคุณออกจากการทดสอบก่อนกำหนด คุณจะ ไม่รู้ การทดสอบใดล้มเหลว
คุณต้องรอจนกว่าการวิ่งทั้งหมดจะจบลงจริงๆ หรือไม่ คุณจึงจะเห็นความล้มเหลวเหล่านั้น
กด Ctrl-T เพื่อช่วยชีวิต!
หากคุณใช้ Mac มีวิธีดูการทดสอบที่ล้มเหลวตั้งแต่เนิ่นๆ:
กด Ctrl-T
ในขณะที่การทดสอบของคุณกำลังทำงาน
เมื่อดำเนินการแล้ว คุณจะเห็นว่ากรณีทดสอบใดกำลังทำงานอยู่ และใช้งานได้นานแค่ไหน หากการทดสอบใดๆ ล้มเหลว คุณจะเช่นกัน ดูความล้มเหลวเหล่านั้น เพื่อให้คุณได้เริ่มต้นแก้ไขก่อนดำเนินการครั้งต่อไป!
นอกจากนี้ยังสะดวกมากสำหรับการดีบักการทดสอบที่เพิ่งหยุดทำงาน Ctrl-T
จะบอกคุณว่าการทดสอบใด กำลังพยายาม เพื่อให้คุณสามารถแยกการทดสอบนั้นและแก้ไขได้
สุดท้ายนี้ ฉันได้สร้างนิสัยในการกดปุ่ม Ctrl-T
ทุกครั้งที่การทดสอบใช้เวลานานอย่างเห็นได้ชัด (เช่น วินาทีหรือนานกว่านั้น) กว่าจะเสร็จสิ้น มันชี้ให้เห็นถึงการทดสอบที่ช้ามากมายที่ฉันต้องทำให้เร็วขึ้น
Ctrl-T ทำงานอย่างไร
สำหรับ Mac Ctrl-T
ส่งข้อความหรือสัญญาณที่เรียกว่า INFO
, ไปยังโปรแกรมใดก็ตามที่ทำงานอยู่:
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
วิธีนี้ไม่ถูกต้องทั้งหมด) พฤติกรรมนี้ไม่แพร่หลายเท่าที่ควร
ถึงกระนั้น เป็นความช่วยเหลือเพิ่มเติมเล็กน้อยที่อาจเป็นประโยชน์ในสถานการณ์ต่างๆ มากมาย หากคุณกำลังสร้างแอป ควรพิจารณาว่าข้อความสถานะประเภทใดที่คุณสามารถแสดงตามความต้องการต่อผู้ที่สนใจได้