我正在尝试让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颜色的脚本中获得输出,并将其输出到控制台?
发布于 2011-04-03 09:02:37
我猜rspec正在检查它正在向其写入输出的流,看看它是否是tty (即控制台),如果不是,则禁用颜色。许多命令都可以做到这一点-例如,GNU ls和grep。由于从子进程到脚本的流不是tty,因此颜色将被禁用。
希望rspec有一个标志,它将强制使用颜色,而不考虑流类型。如果没有,你将不得不求助于一些真正奇怪的恶作剧。
发布于 2011-04-03 09:01:10
在决定是否使用颜色输出之前,rspec工具很可能会检查它是在终端上以交互方式运行,还是从脚本自动运行。
The documentation说你可以通过--color命令行选项强制使用颜色。
试试:rspec --color spec/**/*.rb。
发布于 2017-11-27 02:54:55
可以通过PTY module在伪终端中运行命令,以便保留面向用户的类似终端的行为。功劳归功于tty-command gem (see this issue)的创建者,他在gem中实现了这种行为:
require 'tty-command'
cmd = TTY::Command.new(pty: true)
cmd.run('rspec', 'spec/**/*.rb')请记住,使用伪终端可能会产生不想要的副作用,例如某些git命令using a pager,这实际上会导致命令挂起。因此,引入该功能可能是一个突破性的变化。
https://stackoverflow.com/questions/5526842
复制相似问题