1

私のテストには、外部サービスで動作するコードがいくつかあります。このサービスはあまり安定していないため、理由もなくクラッシュすることがあります。しかし、実行の 80% ではうまく機能します。

したがって、失敗したすべての rspec を数回 (たとえば 2 回または 3 回) 自動的に再実行するメソッドが必要です。それを行う方法はありますか?

4

2 に答える 2

3

多くの人は、あなたのテストは実際には外部サービスに影響を与えるべきではないと言うでしょう。それがそうする理由の 1 つです。一部の外部サービスがダウンしているためにテストが失敗することはありません。

TL;DR はモックとスタブを使用するか、これらの外部サービス呼び出しを置き換えます

于 2012-10-15T09:14:25.537 に答える
1

失敗した仕様を再実行する代わりに、サービスにアクセスするメソッドを設定された回数だけ実行し、結果の論理ORで期待値を実行することはできませんか?

したがって、代わりに:

it "returns expected value for some args" do
   unstable_external_service(<some args>).should == <expected return value>
end

次のようなことをしてください。

def run_x_times(times, args)
  return nil if times == 0
  unstable_external_service(args) || run_x_times(times-1)
end

it "returns expected value for some args" do
  run_x_times(10, <some args>).should == <expected return value>
end

サービスにアクセスするときはいつでも、テスト全体で同じラッパーメソッドを使用できます。ここでは、サービスが失敗したときに戻ると想定していますnilが、そうでない場合は、特定のケースに合わせてこれを変更できます。一般的な考え方がわかります。

于 2012-10-15T08:40:19.360 に答える