情况:使用Rspec,FactoryGirl和VCR测试rails应用程序.
每次创建用户时,都会通过Stripe的API创建关联的Stripe客户.在测试时,添加一个VCR.use_cassette或describe "...", vcr: {cassette_name: 'stripe-customer'} do ...每个涉及用户创建的规范都没有意义.我的实际解决方案如下:
RSpec.configure do |config|
config.around do |example|
VCR.use_cassette('stripe-customer') do |cassette|
example.run
end
end
end
Run Code Online (Sandbox Code Playgroud)
但这是不可持续的,因为每个http请求都会使用相同的盒式磁带,这当然非常糟糕.
问题:如何根据个人要求使用特定灯具(磁带),而无需为每个规格指定磁带?
我有类似的东西,伪代码:
stub_request(:post, "api.stripe.com/customers").with(File.read("cassettes/stripe-customer"))
Run Code Online (Sandbox Code Playgroud)
相关的代码片段(作为要点):
# user_observer.rb
class UserObserver < ActiveRecord::Observer
def after_create(user)
user.create_profile!
begin
customer = Stripe::Customer.create(
email: user.email,
plan: 'default'
)
user.stripe_customer_id = customer.id
user.save!
rescue Stripe::InvalidRequestError => e
raise e
end
end
end
# vcr.rb
require 'vcr'
VCR.configure do |config|
config.default_cassette_options = { record: :once, re_record_interval: 1.day …Run Code Online (Sandbox Code Playgroud)