Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Minitest 실패를 즉시 확인하는 지름길

다음 작은 기능을 체크인하려고 하므로 전체 통합 테스트 실행을 시작합니다. 점들이 화면을 채우는 동안...

......FF....

:-(

테스트 실행이 완료되려면 아직 몇 분이 남아 있습니다. 하지만 테스트 실행을 일찍 종료하면 아무도 알 수 없습니다. 어떤 테스트가 실패했는지.

실패를 보기 전에 전체 실행이 완료될 때까지 기다려야 합니까?

Ctrl-T로 구조하세요!

Mac을 사용하는 경우 테스트 실패를 조기에 확인할 수 있는 방법이 있습니다.

Ctrl-T 누르기 테스트가 실행되는 동안.

그렇게 하면 현재 어떤 테스트 케이스가 실행되고 있는지, 얼마나 오래 실행되었는지 알 수 있습니다. 지금까지 실패한 테스트가 있으면 또한 이러한 오류를 확인하여 다음 실행 전에 오류를 수정하는 데 앞장서십시오!

이것은 또한 정지된 테스트를 디버깅하는 데 정말 편리합니다. Ctrl-T 어떤 테스트가 시도 중인지 알려줍니다. 하나의 테스트만 분리하여 수정할 수 있습니다.

마지막으로 Ctrl-T를 누르는 습관이 생겼습니다. 테스트를 완료하는 데 눈에 띄게 오랜 시간(예:1초 이상)이 소요될 때마다. 더 빠르게 수행해야 하는 느린 테스트가 많이 있음을 알려줍니다.

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를 사용했습니다. 실행한 각 스레드의 역추적을 인쇄합니다. 하지만 INFO 때문에 Linux에서 지원되지 않는 Sidekiq는 다른 신호로 전환되었습니다. 불행히도 해당 신호는 INFO 방식의 키보드 단축키로 트리거할 수 없습니다. 할 수 있습니다.

INFO 때문에 Linux에서는 사용할 수 없습니다(일부는 INFO를 사용하여 어쨌든 이 방법은 완전히 옳지 않습니다.), 이 동작은 가능한 한 널리 퍼져 있지 않습니다.

그래도 다양한 상황에서 유용할 수 있는 약간의 추가 도움입니다. 앱을 만들고 있다면 관심 있는 사람들에게 어떤 종류의 상태 메시지를 주문형으로 표시할 수 있는지 생각해 보는 것이 좋습니다.