2017-04-22 91 views
2

我正在尝试以编程方式运行一系列Rspec测试并捕获每个的输出。如何以编程方式运行rspec测试并捕获输出?

我到目前为止是这样的:

RSpec.configure do |config| 
    config.formatter = :json 
end 

out = StringIO.new 
err = StringIO.new 
RSpec::Core::Runner.run([file], err, out) 

这并不正确运行指定文件,并在终端,我运行此脚本,从我看到的JSON输出,我希望......但由于我给跑步者一个StringIO流,我期望它将JSON输出写入该流而不是stdout。在这种情况下,出站流总是空的。

任何人有任何想法我做错了什么?

+0

您可以将所有转至'$ stdout'的内容写入文件。如果有帮助 http://stackoverflow.com/questions/26894443/intercepting-all-puts-and-print-statements-from-a-ruby-program –

+0

我试过做类似的做$ stdout = StringIO.new',但我仍然在屏幕上获得输出,并且$ stdout中没有任何内容,它是一个空白的StringIO对象。 –

+0

我最终解决了这个问题,因为我只需要知道规范是否失败,并且run函数在成功时返回0,在失败时返回1。仍然不知道为什么输出流看起来不起作用。 –

回答

1

运行一系列Rspec测试我使用Rake并记录它们的输出我使用了一个RSpec :: Core :: RakeTask,其中我可以指定rspec_opts,您可以通过它传递rspecs输出的位置和格式。 例子:

Rake文件

require 'rake' 
require 'rspec/core/rake_task' 

desc "Run tests, recording their output" 

RSpec::Core::RakeTask.new(:spec) do |task| 
    task.pattern = 'spec/*_spec.rb' 
    task.rspec_opts = '--format documentation' + 
    ' --format json --out logs/output.json' 
end 

我在https://github.com/SamuelGarratt/rake_demo做了一个基本的GitHub项目展示这种

以上的Rakefile假定您的RSpec的测试是一个名为“规范”,并最终在文件夹中的“_spec” 。在命令行输入'rake spec'来运行所有rspec测试并记录其输出。

相关问题