如何获得' puts'使用RSpec / parallel_rspec时发送到文件的消息和标准输出?

时间:2015-07-28 18:55:09

标签: ruby selenium rspec capybara

这是我的.rspec_parallel文件的内容。我使用parallel_tests gem在多个浏览器实例中运行测试。据我所知,gem使用RSpec中提供的相同格式化程序选项。

--format html --out results<%= ENV['TEST_ENV_NUMBER'] %>.html

这很棒,我能够获得通常从RSpec看到的HTML输出。然而,所有的&#39;放置&#39;消息和基本标准输出将记录到我的控制台窗口,而不是HTML文件。

如何将此输出输出到我已设置的每个HTML文件中?

1 个答案:

答案 0 :(得分:0)

puts将输出到$stdout,其中output实际上是RSpec::Core::Formatters::BaseFormatter类的实例变量。 output默认为$stdout但是当您传入字符串时,它确定它应该创建一个新的StringIO,然后将其输出到给定的文件名。因此puts不会附加到@output变量。

你可以做一些丑陋的事情,比如创建一个像

这样的跑步者文件
File.open('some_file_name.html','w+') do |file|
  file << `rspec spec --format html` 
end   

然后此文件将包含$stdout的输出,但在这种情况下,您的puts代码不会被html格式化。除此之外,您可以尝试构建自己的Custom Formatter,但可能需要进行相当多的源搜索以确保您能够正确捕获所有内容。

有人说,看来记者似乎已经曝光了添加自定义消息,但我不确定如何正确使用这个See Pull Request 1866

似乎它会像

it "has a name" do |ex|
  ex.reporter.message("Custom Message Here")
  #actual test
end 

但是html格式化程序似乎忽略了这一点。我可以在$ stdout中看到输出,但不能在html文件本身中看到。

祝你好运。