2017-05-24 9 views
1

私はRubyテストに精通しておらず、私の検索で特定の質問に対する答えが得られていません。返品コードのユニットテストを行うにはどうすればいいですか

現在、特定の条件で終了するためにStandardErrorを発生させるアプリがあります。これの欠点は、終了コードが常に1であることです。

終了条件に一意のコードを提供するためにexit()を使用します。

次のように現在、プロジェクトの仕様ははStandardErrorメカニズムをテスト:

it "should raise an exception if no unignored project coverage file files were found" do 
    fixtures_project.ignore_list = ["*fixturesTests*", "*fixtures*"] 
    expect {fixtures_project.coverage_files}.to raise_error(StandardError) 
end 

私はassert($?.exit == 102)ような何かをしたいが、私はまだ終了コードを取得するために手の前に発射するfixtures_project.coverage_filesが必要。

assert_equal(102, fixtures_project.coverage_files, "Hello there")の変形を運のない状態で試しました。私はこれがおそらく単純なRubyだと確信していますが、私はgrokkedまだこのビットはありません。

答えて

2

あなたは$?オブジェクトを使用しようとしていました。終了ステータスを取得するには、$?.exitstatusに電話してください。

+0

raise_errorを確認せずにこれを行う方法を教えてください。 IE。fixtures_project.coverage_filesを呼び出して終了コードを生成するにはどうすればよいですか?私はコードで "raise"を削除したので、もうこれ以上テストすることはできません。 –

+0

そこにraise_errorの期待もしたいのですが?それ以外の場合は、メソッドを呼び出して例外を救済する必要がありますが、これは仕様の良い習慣ではありません。 –

+0

テスト中のコードで、終了する前にStandardErrorを発生させると(nnn)、アプリケーションはコードではなくコード1で終了します。次に、単体テストで2番目の期待値が失敗します。 StandardErrorを発生させる前に(nnn)終了すると、テストで最初の期待値が失敗します。 –

関連する問題