Receita: Usando VCR para especificações

Adicionar a .gitignore

spec/vcr/

Gemfile

group :test do
gem
'vcr'
gem
'webmock'
end

/spec/support/vcr.rb

VCR.configure do |c|
c
.cassette_library_dir = Rails.root.join("spec", "vcr")
c
.hook_into :webmock # or :fakeweb
#c.filter_sensitive_data('APIKEY') { ENV["MAILCHIMP_KEY"] } #use this to filter out sensitive information that you don't want VCR to store in spec/vcr files
#c.filter_sensitive_data('LISTID') { ENV["MAILCHIMP_LIST_ID"] }
end

RSpec.configure do |c|
c
.treat_symbols_as_metadata_keys_with_true_values = true
c
.around(:each, :vcr) do |example|
name
= example.metadata[:full_description].split(/s+/, 2).join("/").underscore.gsub(/[^w/]+/, "_")
options
= example.metadata.slice(:record, :match_requests_on).except(:example_group)
VCR
.use_cassette(name, options) { example.call }
end
end

Sua especificação

it "subscribes lead", :vcr, record: :once do
lead
.add_to_mailchimp
subscribers
= Mailchimp::Lists.new(MAILCHIMP).members(ENV["MAILCHIMP_LIST_ID"])["data"] #retrieving mailchimp list
subscribers_email
= subscribers.map { |subscriber| subscriber["email"] }

#refactor into macro?
Mailchimp::Lists.new(MAILCHIMP).unsubscribe(ENV["MAILCHIMP_LIST_ID"], {email: lead.email }, true, false, false) #remove lead from mailchimp list

subscribers_email
.should include(lead.email)
end