Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Xem ngay lỗi Minitest theo thời gian thực

Bạn sắp check-in tính năng nhỏ tiếp theo, nên bạn chạy bộ test tích hợp đầy đủ. Bạn chờ, và chờ, khi các chấm lấp đầy màn hình, cho đến khi…

......FF....

:-(

Bạn vẫn còn vài phút trước khi test chạy xong. Nhưng nếu bạn dừng chạy test sớm, bạn sẽ không có ý tưởng test nào fail.

Bạn thực sự phải đợi toàn bộ chạy xong trước khi thấy những failure đó?

Ctrl-T đến giải cứu!

Nếu bạn dùng Mac, có cách để thấy failure test sớm:

Nhấn Ctrl-T trong khi test đang chạy.

Khi bạn làm vậy, bạn sẽ thấy test case nào đang chạy, và nó đã chạy bao lâu. Nếu bất kỳ test nào đã fail cho đến nay, bạn cũng sẽ thấy những failure đó, vậy bạn có thể lấy lợi thế sửa chúng trước lần chạy tiếp theo!

Điều này cũng thực sự tiện cho debug test chỉ treo. Ctrl-T sẽ nói cho bạn test nào đang cố gắng chạy, vậy bạn có thể cô lập chỉ test đó và sửa nó.

Cuối cùng, tôi đã xây dựng thói quen nhấn Ctrl-T bất cứ khi nào test mất thời gian đáng chú ý (giả sử, một giây hoặc lâu hơn) để kết thúc. Nó đã chỉ cho tôi rất nhiều test chậm tôi cần làm nhanh hơn.

Ctrl-T hoạt động như thế nào?

Trên Mac, Ctrl-T gửi một tin nhắn, hoặc signal, gọi là INFO, cho bất kỳ chương trình nào đang chạy:

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 biết về INFO, và phản hồi nó bằng cách in thông tin về lần chạy test:

~/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 ............................

Khá hay!

Biết điều này có thể, bạn có thể nghĩ đến cách ứng dụng khác có thể xử lý INFO:

  • Rails có thể hiển thị controller action đang chạy hoặc một số thống kê hiệu năng.
  • Sidekiq có thể nói cho bạn mỗi worker đang làm gì, vậy bạn có thể thấy chúng kẹt ở đâu.

Và Sidekiq thực sự từng dùng INFO để in backtrace của mỗi thread nó chạy. Nhưng vì INFO không được hỗ trợ trên Linux, Sidekiq chuyển sang signal khác. Thật không may, signal đó không thể được kích hoạt bởi phím tắt bàn phím như INFO.

Bởi vì INFO không có sẵn trên Linux (và một số có thể nói dùng INFO cách này không hoàn toàn đúng), hành vi này không lan rộng như nó có thể.

Vẫn vậy, đó là một chút giúp đỡ thêm có thể hữu ích trong nhiều tình huống. Nếu bạn đang xây dựng ứng dụng, đáng để suy nghĩ về loại thông điệp trạng thái bạn có thể hiển thị theo yêu cầu cho những người quan tâm.