Мои спецификации перейдут в основную ветку. Если я создам новую ветку и изменю какой-то код, совершенно не связанный с подписками, они потерпят неудачу с этим. Единственный способ, которым я могу заставить их пройти, - это изменить мой файл vcr.rb на :record => :new_episodes
.
Если я оставлю эту опцию включенной, то почти каждый раз, когда мои спецификации запускаются, у меня появляются новые измененные файлы данных для кассет, которые в конечном итоге фиксируются, что действительно разбавляет журналы для Git.
Любые предложения о том, как справиться с этим? Многие спецификации, которые ломаются, основаны на этом сопоставителе:
describe "#change_plan_to", vcr: {match_requests_on: [:method, :uri, :body]} do
Этот сопоставитель слишком открыт для изменений? Я не смог передать спецификации каким-либо другим способом с помощью вызовов Stripe API.
Failure/Error: @subscription.create_stripe_customer
VCR::Errors::UnhandledHTTPRequestError:
================================================================================
An HTTP request has been made that VCR does not know how to handle:
POST https://api.stripe.com/v1/customers
VCR is currently using the following cassette:
- /Users/app/spec/data/Subscription/_change_plan_to/stripe_customer_subscription_plan_/name/.json
- :record => :once
- :match_requests_on => [:method, :uri, :body]
Under the current configuration VCR can not find a suitable HTTP interaction
to replay and is prevented from recording new requests. There are a few ways
you can deal with this:
* If you're surprised VCR is raising this error
and want insight about how VCR attempted to handle the request,
you can use the debug_logger configuration option to log more details [1].
* You can use the :new_episodes record mode to allow VCR to
record this new request to the existing cassette [2].
* If you want VCR to ignore this request (and others like it), you can
set an `ignore_request` callback [3].
* The current record mode (:once) does not allow new requests to be recorded
to a previously recorded cassette. You can delete the cassette file and re-run
your tests to allow the cassette to be recorded with this request [4].
* The cassette contains 109 HTTP interactions that have not been
played back. If your request is non-deterministic, you may need to
change your :match_requests_on cassette option to be more lenient
or use a custom request matcher to allow it to match [5].
[1] https://www.relishapp.com/vcr/vcr/v/2-5-0/docs/configuration/debug-logging
[2] https://www.relishapp.com/vcr/vcr/v/2-5-0/docs/record-modes/new-episodes
[3] https://www.relishapp.com/vcr/vcr/v/2-5-0/docs/configuration/ignore-request
[4] https://www.relishapp.com/vcr/vcr/v/2-5-0/docs/record-modes/once
[5] https://www.relishapp.com/vcr/vcr/v/2-5-0/docs/request-matching
================================================================================
# ./app/models/subscription.rb:83:in `create_stripe_customer'
# ./spec/models/subscription_spec.rb:68:in `block (3 levels) in <top (required)>'
# -e:1:in `<main>'
Я придумал еще кое-что. Спецификации ломаются только тогда, когда я добавляю новую спецификацию в стек. Почему они ломаются, когда в набор добавляются новые вещи?