4

こんにちは、タグ付きのvcrを使用してキュウリでGoogle認証をテストしようとしています。

トークンの有効期限が切れるまで、すべてがうまくいきます。期限が切れたらこうなると思う

ここに画像の説明を入力

しかし、私はこの内容のファイルを持っています

http_interactions:
- request:
  method: post
  uri: https://accounts.google.com/o/oauth2/token
  body:

VCR に新しいリクエストの記録を許可すると、このカセットの内容が変更されます。メソッドと uri が POST をhttps://accounts.google.com/o/oauth2/tokenに変更しない場合、その理由がわかりません。

タグを変更して新しいエピソードを記録し、テストに合格しました... 私は無知です。

テストを再度実行すると、トークン URL への POST が実行されているときに次のようになります。

Completed 500 Internal Server Error in 449ms

Psych::BadAlias (Unknown alias: 70317249293120):
4

3 に答える 3

2

リクエストごとに異なるいくつかのパラメーターが投稿内にある可能性がありますか? その場合は、VCR 構成に追加することで、このパラメーターを無視するように VCR に指示できmatch_requests_on: [:method, VCR.request_matchers.uri_without_params("your_param")]ます。

リクエストを詳細に分析し、どのパラメータが変化しているかを調べます。他の基準で一致するように VCR に指示することもできます。こちらをご覧ください https://www.relishapp.com/vcr/vcr/v/2-4-0/docs/request-matching

于 2013-04-30T08:44:52.023 に答える
1

同じ URL で同じ問題が発生していました。https://accounts.google.com/o/oauth2/token私にとっての問題は、私のコードが同じ呼び出しを複数回行おうとしていたことでした。

VCR のエラー メッセージに示されている考えられる解決策の 1 つに、解決策が示されています。

カセットには、この要求に一致する HTTP インタラクションが含まれていますが、既に再生されています。単一の HTTP インタラクションを複数回再生できるようにする場合は、:allow_playback_repeatsカセット オプションを設定します。

私の場合、このオプションを追加することで問題が解決しました。これは、重複したリクエストを再記録するのではなく、以前に記録された重複したリクエストの結果を再生するだけの 1.x 機能に戻すように VCR に指示するためです。

私はキュウリを使用しているので、私の解決策は以下を my に追加することでしたfeatures/support/vcr.rb:

VCR.cucumber_tags do |t|
  t.tag  '@vcr', use_scenario_name: true
  t.tag  '@new_episodes', record: :new_episodes
  t.tag  '@allow_playback_repeats', use_scenario_name: true, allow_playback_repeats: true, record: :new_episodes
end

@allow_playback_repeatsタグに注目してください。シナリオにこのタグを付けただけで、その後はすべて正常に機能しました。

@allow_playback_repeats
Scenario: Uploading a video initiates an upload to YouTube

@vcrと の両方を指定すると機能しないことに注意してください@allow_playback_repeats

RSpec を使用している場合は、それに応じてソリューションを調整する必要がありますが、次のように単純にする必要があります。

it "does something", :vcr => { allow_playback_repeats: true } do
   ...
end
于 2015-04-24T20:53:17.633 に答える