Computer >> Máy Tính >  >> Lập trình >> Ruby

Một lối tắt để xem ngay những lỗi nhỏ nhất của bạn

Bạn sắp kiểm tra tính năng nhỏ tiếp theo của mình, vì vậy bạn bắt đầu quá trình chạy thử nghiệm tích hợp đầy đủ. Bạn đợi và đợi, khi các dấu chấm lấp đầy màn hình của bạn, cho đến khi…

......FF....

:-(

Bạn vẫn còn một vài phút trước khi các bài kiểm tra của bạn chạy xong. Nhưng nếu bạn bỏ chạy thử nghiệm sớm, bạn sẽ không biết thử nghiệm nào không thành công.

Bạn có thực sự phải đợi toàn bộ quá trình chạy kết thúc trước khi có thể thấy những lỗi đó không?

Ctrl-T để giải cứu!

Nếu bạn đang sử dụng máy Mac, có một cách để xem các lỗi thử nghiệm của bạn sớm:

Nhấn Ctrl-T trong khi các thử nghiệm của bạn đang chạy.

Khi thực hiện, bạn sẽ thấy trường hợp thử nghiệm nào hiện đang chạy và nó đã chạy trong bao lâu. Nếu bất kỳ thử nghiệm nào không thành công cho đến nay, bạn cũng sẽ xem những lỗi đó để bạn có thể bắt đầu khắc phục chúng trước lần chạy tiếp theo!

Điều này cũng thực sự tiện dụng để gỡ lỗi các bài kiểm tra bị treo. Ctrl-T sẽ cho bạn biết thử nghiệm nào đang thử để chạy, vì vậy bạn có thể tách riêng một bài kiểm tra đó và khắc phục nó.

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

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

Trên máy Mac, Ctrl-T gửi một tin nhắn hoặc tín hiệu, được 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ề quá trình chạy thử nghiệm:

~/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á đẹp!

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

  • Rails có thể hiển thị hành động của bộ điều khiển hiện đang chạy hoặc một số số liệu thống kê về hiệu suất.
  • Sidekiq có thể cho bạn biết từng công nhân đang làm gì, vì vậy bạn có thể biết họ gặp khó khăn ở đâu.

Và Sidekiq thực sự đã sử dụng INFO để in dấu vết của mỗi luồng mà nó đã chạy. Nhưng vì INFO không được hỗ trợ trên Linux, Sidekiq đã chuyển sang một tín hiệu khác. Rất tiếc, tín hiệu đó không thể được kích hoạt bằng phím tắt theo cách INFO có thể.

Bởi vì INFO không khả dụng trên Linux (và một số người có thể nói rằng sử dụng INFO dù sao thì cách này cũng không hoàn toàn đúng), hành vi này không phổ biến như nó có thể xảy ra.

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