# How to ガイド - 単体テストのための VCR の設定
ここでは、単体テスト向けに HTTP のやり取りを記録するよう VCR を設定する方法について説明します。
# 単体テストで VCR が必要な理由
VCR gem は RSpec のテストと連携して、テストスイートの実行時に送信される HTTP のやり取り (リクエスト) をすべて記録し、そのテストスイートが再度実行された場合は同じレスポンスを再生します。
これは、RSpec で安定したテストを行うために重要なことです。特に、データが常に変化する可能性のある環境では非常に重要です。たとえば、同じ GET
リクエストに対して、後で異なるレスポンスになることがありますが、VCR を使用すると、以前取得した同じ HTTP レスポンスでテストを再生できるため、テストで同一のアサーションを記述できるようになります。
これにより、テストにおける変動性の一側面を取り除き、コードの変更についてのみテストを行えるようになります。
VCR の詳細については、こちら (opens new window) を確認してください。
# 開始方法
コマンド workato new [PATH]
を使用してコネクタープロジェクトを生成すると、VCR が自動的に設定されます。
secure
オプションを指定してプロジェクトを設定する場合、VCR 記録も暗号化されます。Workato では secure
オプションを使用することをお勧めします。どのような場合でも、spec_helper.rb
には、VCR 記録の設定に関するすべての情報が含まれています。プロジェクトを secure
に設定することで、VCR 記録が master.key
で暗号化されるようになります。暗号化を含む spec_helper.rb
の例を以下に示します。
# frozen_string_literal: true
require 'bundler/setup'
require 'json'
require "webmock/rspec"
require "timecop"
require "vcr"
require "workato-connector-sdk"
require "workato/testing/vcr_encrypted_cassette_serializer"
require "workato/testing/vcr_multipart_body_matcher"
RSpec.configure do |config|
# Enable flags like --only-failures and --next-failure
config.example_status_persistence_file_path = ".rspec_status"
# Disable RSpec exposing methods globally on `Module` and `main`
config.disable_monkey_patching!
config.expect_with :rspec do |c|
c.syntax = :expect
end
end
VCR.configure do |config|
config.cassette_library_dir = "tape_library"
config.hook_into :webmock
config.cassette_serializers[:encrypted] = Workato::Testing::VCREncryptedCassetteSerializer.new
config.register_request_matcher :headers_without_user_agent do |request1, request2|
request1.headers.except("User-Agent") == request2.headers.except("User-Agent")
end
config.register_request_matcher :multipart_body do |request1, request2|
Workato::Testing::VCRMultipartBodyMatcher.call(request1, request2)
end
config.default_cassette_options = {
record: ENV.fetch('VCR_RECORD_MODE', :none).to_sym,
serialize_with: :encrypted,
match_requests_on: %i[uri headers_without_user_agent body]
}
config.configure_rspec_metadata!
end
TIP
デフォルトでは、secure の記録モードは none
であり、新しい VCR カセットは記録されません。
新しい VCR カセットを記録するには、次のコマンド VCR_RECORD_MODE=once bundle exec rspec spec/actions/test_action_spec.rb
を使用して RSpec のテストを実行してください。
# VCR の設定の変更は可能か
spec_helper.rb
で変更することができます。必要に応じて spec_helper を変更することで、たとえば VCR では、送信 HTTP リクエストを以前記録したやり取りに一致させる条件を変更したり、緩和したりすることができます。
例 : spec_helper.rb
を調整することで、さまざまな認証ヘッダーを受け入れるように VCR の一致条件を緩和させることができます。
config.register_request_matcher :headers_without_user_agent do |request1, request2|
request1.headers.except('User-Agent', 'Authorization') == request2.headers.except('User-Agent', 'Authorization')
end
Last updated: 2023/8/31 1:07:14