2017-04-22 22 views
2

一連のRspecテストをプログラムで実行し、それぞれの出力をキャプチャしようとしています。プログラムでrspecテストを実行して出力をキャプチャする方法は?

私はこれまで持っていることはこれです:これは正しく指定したファイルを実行しない、と私はからこのスクリプトを実行し、端末に私は期待してJSON出力を参照してください...しかし、以来

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

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

私はランナーに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

Rakeを使用して出力を記録するにはRSpec :: Core :: RakeTaskを使用します。ここでrspec_optsを指定して、rspecs出力の場所とフォーマットを渡すことができます。 例:

Rakefile

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 

私はRakefile上記https://github.com/SamuelGarratt/rake_demo

ザ・でこれを証明する基本githubのプロジェクトは、あなたのRSpecのテストが「_spec」に「スペック」と終わりというフォルダにあると仮定し作られました。コマンドラインで 'rake spec'と入力すると、すべてのrspecテストが実行され、出力が記録されます。

関連する問題