4

最近、キュウリのテストでリクエストをスタブ化するためにVCRの使用を開始しました。キュウリのテーブルを使用してさまざまな種類のリクエストを記述し、それらをgherkinで変数として格納しています。カセットファイルはすべてerbを含むように作り直されているため、テストするリクエストの値を置き換えることができます。

問題は、新しい要求があるときはいつでも、VCRが新しい要求を記録し、カセットからすべてのerbを上書き(削除)して、その例で補間された要求に置き換えることです。値が変更されたリクエスト(たとえば、通信しているAPIから受け取ったタイムスタンプの値)を実行するたびに、すべてのerbをカセットファイルにコピーして戻す必要があります。テストは常に実行されるため、これはイライラします。

新しい応答を記録するときにVCRがerbを取り除く理由を誰かが知っていますか?回避策のアイデアはありますか?テンプレートを補間する前に保存する方法はありますか?

4

1 に答える 1

4

カセットへの手動変更を新しく記録されたカセットと自動的にマージすることは難しい問題であり、私の意見では、テキストドキュメントの履歴を処理し、それらのマージを管理するために特別に設計されたツール(つまりソース管理システム)に任せるのが最善です。 。ERBを使用すると、さらに困難になります。ERBを使用して変数を補間している場合でも、有効なルビーを使用できます。ERBには、ループや条件などが存在する可能性があります。VCRがこのようなものを自動的にマージする方法はありません。

いくつかの提案:

  • カセットが頻繁に上書きされないように、カセットをよりきめ細かく使用してください。私は、HTTPリクエストまたはHTTPリクエストの論理グループごとにカゼットを使用する傾向があります。
  • :once録音モード(最近のデフォルト)を使用して、既存のカセットが上書きされないようにします。
  • VCRの機密データフィルタリング機能をご覧ください。これはERBよりもはるかに柔軟性がありません(つまり、ループ、条件、または任意のルビーコードを使用することはできません)が、単純な変数の補間では、非常にうまく機能します。ERBを使用するのではなく、プレースホルダー文字列を使用します<PASSWORD>。たとえば、パスワードの代わりにのような文字列を使用できます。VCRは、カセットを記録するときにプレースホルダーテキストを自動的に挿入し、再生時に正しい実際の値に置き換えます。
  • それがニーズを満たさない場合は、before_recordフックとbefore_playbackフックを使用すると、カセットの録音時に自動補間(またはERBスニペット挿入)を実行するために必要なすべての機能が提供されます。これは基本的にフィルタリングがどのように機能するかです-ここを参照してください。

これらがあなたのニーズを満たさない場合、私は確かにVCRを改善する方法についてのアイデアを受け入れています。

于 2011-06-23T06:26:29.447 に答える