格式化来自 Test::Unit 的控制台输出

Formatting console output from Test::Unit

require "json"
require "selenium-webdriver"
gem "test-unit"
require "test/unit"

class Tests < Test::Unit::TestCase

$out_file = File.new('log.txt', 'w')

def $stdout.write string
  $out_file.write string
  super
end

当我使用上面的代码时,控制台中的输出看起来不错,但是当它完成时它会将所有内容转储到我的日志文件中(如我所料)但是日志文件中的格式在末尾出现了奇怪的额外字符.下面的前两行符合预期,但第三行是 ???

第一个 运行 - 主要:1.998

首先 运行 - 钻取:16.527

[32;1米.[0米

我一直在四处寻找一些选项,我尝试配置 test-unit.yml 文件来摆弄下面的格式选项,但无论我尝试什么,输出的格式都没有改变.

跑者:控制台 console_options: output_level: 1 格式:文档 show_detail_immediately: 真

[32;1m 并且通常任何 [((\d+);?)m 都是颜色转义序列。它们突出显示控制台中的输出。 [32;1m.[0m字面上是一个绿点,表示测试执行成功。

三种处理方式:

在输出流上将 tty? 属性设置为 false

这将成为一个完美的日志文件,但您将失去控制台本身的任何颜色突出显示。

控制台和文件使用不同的编写器

这是一个漫长的过程,似乎对你的方法来说有点矫枉过正。

过滤掉转义序列

我会选择:

$out_file.write string.gsub /\[[\d;]+m/, ''

上面的内容会过滤掉所有废话,你会在你的文件中得到普通的老式文本。