我在我的rails3应用程序中使用了watchr,因为我无法使自动测试正常工作。守望者一直很棒,但唯一的问题是我无法获得彩色输出。我将其用作我的watchr file
如果我通过“rspec spec /”手动运行我的测试,那么我会得到彩色输出。但是,让监视器运行测试(通过修改我的一个文件),输出不再是彩色的。
我注意到的一件事是这部分似乎以某种方式阻止了彩色输出
def run(cmd)
puts(cmd)
`#{cmd}`
end
通常情况下,watchr使用此命令运行测试(在我的watchr文件中)
result = run "rake spec"
但如果我改为做以下情况,我会得到彩色输出。
result = system "rake spec"
唯一的问题是上面的行不再将输出捕获到“结果”,这反过来又会使咆哮通知不再起作用。
关于我如何才能拥有两全其美的想法?咆哮通知和我的测试输出颜色?
答案 0 :(得分:3)
我也遇到了这个问题。解决方案是在rspec命令行调用中除了--color之外还提供--tty选项,例如:
result = run("bundle exec rspec --color --tty #{spec}")
根据rspec google小组的this thread:
--tty选项告诉RSpec输出正在流式传输到终端而不是文件,在这种情况下,即使调用了--color,我们也不想打印颜色代码。
如果您然后将结果“放回”到终端,您将看到原始着色。如果你想为Growl解析那个输出,你会想要使用Bill Turner提供的strip_ansi方法去掉ansi颜色代码。
希望有所帮助!
答案 1 :(得分:0)
这就是我在.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 /目录中有一些图像,并且还安装了growlnotify binary。
编辑:哦,你可能还想查看spec.opts文件中的内容(如果有的话) - 它可能没有指定--color
。
并且growl方法中的strip_ansi
用于去除颜色代码,因此它将显示在咆哮声中。
def strip_ansi(m)
m.gsub(/\e\[[^m]*m/, '')
end
答案 2 :(得分:0)
输出未显示颜色与将测试输出保存到变量有关。我有监视器设置它的方式将“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
现在我只需要弄清楚如何以彩色输出信息!