2010-12-11 2 views
3

autotest를 제대로 수행 할 수 없어서 내 rails3 앱에서 watchr을 사용하고 있습니다. Watchr은 훌륭했지만 유일한 문제는 컬러 출력을 얻을 수 없다는 것입니다. 나는 이것을 내 것으로 사용하고있다 watchr file레일 응용 프로그램에서 watchr를 사용하여 색상이 지정된 출력

"rspec spec /"을 통해 수동으로 테스트를 실행하면 색상이 출력된다. 그러나 감시자가 테스트를 실행하게하면 (내 파일 중 하나를 수정하여) 출력이 더 이상 색상이 아닙니다. 내가 알

한 것은이 부분은 색 출력 어떻게 든

def run(cmd) 
    puts(cmd) 
    `#{cmd}` 
end 

일반적으로 방지하는 것이다, watchr이 (내 watchr 파일)

result = run "rake spec" 

를 사용하여 테스트를 실행하지만 만약 대신 다음과 같이 컬러 출력을 얻습니다.

result = system "rake spec" 

만 문제는 위의 줄이 더 이상 출력에 "결과", 차례 망 으르렁 거리는 소리 알림에서 더 이상 작업을 캡처하는 없습니다.

내가 두 세계에서 최고의 성능을 발휘할 수있는 방법에 대한 아이디어가 있으십니까? Growl 알림과 테스트 결과가 컬러로 표시됩니까?

def run(cmd) 
    `#{cmd}` 
end 

def run_spec_file(spec) 
    system('clear') 
    puts "Running #{spec}" 
    result = run("bundle exec rspeC#{spec}") 
    puts result 
    growl result.split("\n").last rescue nil 
end 

그리고 으르렁 비트는 이것이다 :하십시오 ~/일부 이미지를 기대

def growl(message) 
    growlnotify = `which growlnotify`.chomp 
    unless growlnotify.empty? 
    title = "Test Results" 
    image = message.match(/\s0\s(errors|failures)/) ? "~/.watchr_images/ruby_green.png" : "~/.watchr_images/ruby_red.png" 
    options = "-w -n Watchr --image '#{File.expand_path(image)}' -m '#{strip_ansi(message)}' '#{title}'" 
    run("#{growlnotify} #{options} &") 
    end 
end 

답변

0

출력이 컬러로 표시되지 않는 것은 테스트 출력을 변수에 저장하는 것과 관련이 있습니다. watchr 설정을 통해 "rake spec"출력을 변수에 저장 한 다음이 변수를 "puts"를 사용하여 터미널에 출력합니다.

def run(cmd) 
    puts(cmd) 
    `#{cmd}` 
end 

# what's called to run my tests 
result = run "rake spec" 

# then output it 
puts result 

이제 색상으로 정보를 출력하는 방법을 알아야합니다.

+0

알아 냈습니까? – ZMorek

0

이것은 내 .watchr 파일에 그 라인이 함께 뭔가를하는 방법입니다. watchr_images/디렉토리에 저장하고, growlnotify binary도 설치합니다.

EDIT : 아, spec.opts 파일에있는 내용을 확인하고 싶을 수도 있습니다. --color이 지정되어 있지 않을 수 있습니다.

그리고 growl 메서드의 strip_ansi을 사용하여 색상 코드를 제거하여 울퉁불퉁 알림에 표시합니다.

def strip_ansi(m) 
    m.gsub(/\e\[[^m]*m/, '') 
end 
+0

의견에 감사드립니다. 그러나 그 중 아무 것도 색상이 나에게 나타나지 않는 이유는 아닙니다. 으르렁 거리는 소리가 나를 위해 실제로 잘 작동하고 있습니다. – Lan

3

방금이 문제도 다루었습니다. 이 솔루션은 RSpec에 명령 행 호출에, --color뿐만 아니라, --tty 옵션을 제공하는 것입니다 예 :

result = run("bundle exec rspec --color --tty #{spec}") 

RSpec에 구글 그룹에 this thread에 따르면

--tty 옵션은 출력이 파일과 반대로 터미널로 스트리밍되는 것을 RSpec에 알려주는 것입니다.이 경우에 --color가 호출 되더라도 색상 코드를 인쇄하고 싶지는 않습니다.

결과를 단말기에 "다시 넣으면"원래 색이 표시됩니다. Growl에 대한 출력을 구문 분석하려면 Bill Turner가 제공 한 strip_ansi 메소드를 사용하여 ansi 색상 코드를 제거해야합니다.

희망 하시겠습니까?

관련 문제