5

私が取り組んでいるプロジェクトには、実際に外部に出てネットワーク経由でサードパーティの API にヒットする統合テストがあります...これらのテストの実行には非常に長い時間がかかります。VCR のようなものを実装して、テストがやり取りするデータをフィクスチャとしてキャプチャできるようにし、これらのテストの信頼性と速度を向上させることを提案しました。

現時点ではコードベースにアクセスできませんが、テストは次のようなことを行っていたと思います。

before do
  login_some_user
end

after do
  make_web_request_to_clear_items_in_cart
end

it "adds some items to the user's cart" do
  make_web_request_to_add_item_to_a_cart
end

したがって、基本的に before ブロックは Web リクエストを作成し、サンプルはまったく異なるリクエストを作成し、after ブロック (使用するのが理想的ではないことはわかっています) は、サンプルによって作成されたレコードをクリーンアップするための 3 番目のリクエストを作成しました。

Web リクエストをキャプチャし、例に基づいて名前を付けて保存する、spec_helper の around ブロックをセットアップします。ただし、テストを繰り返し実行した後、テストが非常に不安定になり、合格することもあれば、合格しないこともあることがわかりました。前と後のブロックを別の VCR.use_cassette ブロック呼び出しでラップしようとしましたが、違いはありませんでした。

私は何かが足りないのではないかと思っています.このような複数のリクエストを処理する方法はありますか?

4

1 に答える 1

9

VCR は複数の要求を処理できます。疑似コードから、次のようになります。

it "adds some items to the user's cart" do
 VCR.use_cassette "your_path/cassette_name" do
   login_some_user
   make_web_request_to_add_item_to_a_cart
   make_web_request_to_clear_items_in_cart
 end
end

カセットyour_path/cassette_nameには 3 つの Web 要求がすべて含まれます。

あなたの問題は、ブロックの使用beforeafter起因する可能性があります。VCR がフックを処理する方法については、 Myron Marston の説明を参照してください。before(:all)

于 2013-05-23T23:44:42.570 に答える