小编Phi*_*nne的帖子

根据要求使用特定的VCR盒式磁带

情况:使用Rspec,FactoryGirl和VCR测试rails应用程序.

每次创建用户时,都会通过Stripe的API创建关联的Stripe客户.在测试时,添加一个VCR.use_cassettedescribe "...", 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)

ruby testing rspec webmock vcr

5
推荐指数
1
解决办法
4472
查看次数

标签 统计

rspec ×1

ruby ×1

testing ×1

vcr ×1

webmock ×1