Json 如何以编程方式运行rspec测试并捕获输出?

Json 如何以编程方式运行rspec测试并捕获输出?,json,ruby,rspec,Json,Ruby,Rspec,我试图以编程方式运行一系列Rspec测试,并捕获每个测试的输出 到目前为止,我得到的是: RSpec.configure do |config| config.formatter = :json end out = StringIO.new err = StringIO.new RSpec::Core::Runner.run([file], err, out) 这确实正确地运行了给定的文件,在我运行这个脚本的终端中,我看到了我期望的JSON输出。。。但是由于我给了运行程序一个String

我试图以编程方式运行一系列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。在这种情况下,输出流总是空的


有人知道我做错了什么吗?

要运行一系列Rspec测试,我使用Rake并记录它们的输出,我使用Rspec::Core::RakeTask,我可以在其中指定Rspec_opts,通过它可以传递Rspec输出的位置和格式。 例如:

耙子

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
我做了一个基本的github项目,在


上面的Rakefile假设您的rspec测试位于名为“spec”的文件夹中,并以“\u spec”结尾。在命令行中键入“rake spec”以运行所有rspec测试并记录其输出。

您可以将转到
$stdout
的所有内容写入文件。如果这对我有帮助的话,我尝试过做一些类似的事情,比如做
$stdout=StringIO.new
,但是我仍然在屏幕上得到输出,并且$stdout中没有任何内容,它是一个空白的StringIO对象。我最终解决了这个问题,因为我只需要知道规范是否失败,
run
函数成功时返回0,失败时返回1。仍然不知道为什么输出流似乎不工作。我发现我在rspec 3.3中有这个问题,但在rspec 3.6中它似乎工作得很好。。。