0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

multipart/form-data なリクエストを VCR でテスト時に VCR::Errors::UnhandledHTTPRequestError で落ちる

Posted at

概要

ファイルアップロードを含む API 通信を Faraday で実装して、 VCR でテストしていた時に、初回のテストは通ったが2回目以降のテスト実行で VCR::Errors::UnhandledHTTPRequestError で落ちた。
既に cassette が存在する場合、リクエストの body との一致まで確認する設定にしている場合、 body 中の boundary は毎回異なるため、2回目以降のテスト実行が落ちてしまう。
気付けば何ということのない話だが、汎用的なエラーメッセージしか出ないと同じリクエストをしようとしているはずなのだけど、と言う先入観に囚われて少し詰まったので記録。

暫定的な回避策

該当の RSpec ファイル中での VCR の default_cassette_options を変更して body の確認をしないようにした。

VCR.config do |c|
  # 全体設定ファイルでは match_requests_on: [:method, :uri, :body] としていた
  c.default_cassette_options = { record: :once, match_requests_on: [:method, :uri] } 
end

これでテスト実行時に作成されるリクエスト中の body が記録した cassette と一致しなくても呼び出されるためテストが通る

もうちょっとまともな対応をしたい場合

一応それっぽい記事を見つけたのだが、面倒臭そうなので実際には対応していない。恐らく以下の記事を参考にすれば boundary の差分以外を除外したものを比較する対応ができる。
https://www.kabisa.nl/tech/matching-multipart-request-bodies-with-vcr/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?