我试图让watchr在文件发生变化时自动运行测试,并获得我需要的大部分工作,除了RSpec的所有ANSI颜色都被忽略了。违规代码如下:
stdin, stdout, stderr = Open3.popen3(cmd)
stdout.each_line do |line|
last_output = line
puts line
end
当cmd等于rspec spec/**/*.rb
之类的值时,上面的代码会运行RSpec,除非所有输出都是单色的。我已经看过使用Kernel.system
代替,但系统不返回我需要确定测试失败/成功的输出。如何从Ruby中执行包含ANSI颜色的脚本获取输出,并将其输出到控制台?
答案 0 :(得分:6)
我猜想rspec正在检查它正在写入输出的流以查看它是否是tty(即控制台),如果不是,则禁用颜色。许多命令都是这样做的 - 例如GNU ls和grep。由于从子进程到脚本的流不是tty,因此将禁用颜色。
希望rspec有一个标志,它会强制使用颜色,而不管流类型如何。如果没有,你将不得不诉诸一些真正奇怪的stty shenanigans。
答案 1 :(得分:5)
rspec
工具正在检查它是否在终端上以交互方式运行,或者在决定使用颜色输出之前是否自动从脚本运行,这很有可能。
The documentation表示您可以使用--color
命令行选项强制使用颜色。
尝试:rspec --color spec/**/*.rb
。