цветной вывод с использованием watchr в приложении rails - PullRequest
3 голосов
/ 11 декабря 2010

Я использую watchr в своем приложении rails3, так как я не могу настроить автотест для правильной работы.Watchr был великолепен, но единственная проблема в том, что я не могу получить цветной вывод.Я использую это как мой файл наблюдателя

Если я запускаю свои тесты вручную через "rspec spec /", то я получаю цветной вывод.Однако, позволяя watchr запускать тесты (с помощью изменения одного из моих файлов), вывод больше не является цветным.

Одна вещь, которую я замечаю, заключается в том, что эта часть каким-то образом предотвращает цветной вывод

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

Обычно, watchr запускает тесты, используя это (в моем файле наблюдения)

result = run "rake spec"

Но если я вместо этого сделаю следующее, я получу цветной вывод.

result = system "rake spec"

Единственная проблема заключается в том, чтовышеприведенная строка больше не фиксирует вывод в "result", который, в свою очередь, больше не работает с уведомлениями рычания.

Есть какие-нибудь идеи о том, как получить лучшее из обоих миров?Уведомления о рычании И мой тестовый вывод в цвете?

Ответы [ 3 ]

3 голосов
/ 25 февраля 2011

Я тоже столкнулся с этой проблемой.Решением является предоставление опции --tty, в дополнение к --color, для вызова командной строки rspec, например:

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

Согласно этой теме в rspec googlegroup:

Опция --tty предназначена для того, чтобы сообщить RSpec, что вывод передается на терминал, а не в файл, и в этом случае мы даже не хотим печатать цветовые кодыесли --color вызывается.

Если вы затем «положите» результат обратно в терминал, вы увидите оригинальную раскраску.Если вы хотите проанализировать этот вывод для Growl, вам нужно вырезать цветовые коды ANSI, используя предоставленный Биллом Тернером метод strip_ansi.

Надеюсь, это поможет!

0 голосов
/ 11 декабря 2010

Вывод, не отображаемый в цвете, связан с сохранением результатов теста в переменную.Как я настроил watchr, он сохраняет вывод «rake spec» в переменную, затем эта переменная выводится на терминал с помощью «put».

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

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

# then output it
puts result

Теперь мне просто нужно выяснить, как вывести выводинформация в цвете!

0 голосов
/ 11 декабря 2010

Вот как у меня есть что-то в том же духе в моем файле .watchr:

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

Что ожидает некоторые изображения в~ / .watchr_images / в вашем устройстве разработчика, а также установлен двоичный файл .

РЕДАКТИРОВАТЬ: О, и вы также можете проверить, что находится в вашем файле spec.opts, еслиесть один - он может не указывать --color.

И strip_ansi в методе рычания используется для удаления цветовых кодов, чтобы он отображался в уведомлении рычания.

def strip_ansi(m)
  m.gsub(/\e\[[^m]*m/, '')
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...