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

时间:2017-04-22 00:13:19

标签: 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输出......但是因为我给了跑步者一个StringIO流,我希望它将JSON输出写入而不是stdout。在这种情况下,输出流总是空的。

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分: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”的文件夹中,并以“_spec”结尾。在命令行上键入“rake spec”以运行所有rspec测试并记录其输出。