为Rails设置VCR

时间:2016-07-10 02:11:41

标签: ruby-on-rails ruby vcr

我目前正试图让VCR正确运行我的应用。现在一切似乎都配置正确,但我必须遗漏一些东西,因为当使用VCR.use_cassette的测试没有呈现我已设置的yml文件中的响应时。我将发布与该问题相关的所有代码,如果我做错了,请告诉我。

/support/vcr.rb:

    VCR.configure do |c|
  c.configure_rspec_metadata!
  c.cassette_library_dir = Rails.root.join("spec", "vcr")
  c.hook_into :webmock
  c.after_http_request do |request, _response|
    VCR.http_requests_made << request
  end
end

请求规范:

 require "rails_helper"

describe "Mailchimp" do
  describe "Manage list" do
    let!(:subscriber) { FactoryGirl.create(:subscriber) }

    it "adds new subscriber to list" do
      expect do
        VCR.use_cassettes("mailchimp/list") do
          post new_subscriber_path
        end.to change(:subscriber, :count).by(1)
      end
    end
  end
end

YML文件:/vcr/mailchimp/list.yml

NOTHING RENDERS. THIS IS WHERE I EXPECT THE RESPONSE FOR VCR BUT I"M GETTING NOTHING.

希望这是足够的信息。如果您需要更多,请告诉我?

2 个答案:

答案 0 :(得分:1)

尝试添加

VCR.configure do |config|
  config.allow_http_connections_when_no_cassette = true
end

答案 1 :(得分:0)

我无法确定您的情况可能出现的错误,但我的想法是:

require "rails_helper"

describe "Mailchimp" do
  describe "Manage list" do
    let!(:subscriber) { FactoryGirl.create(:subscriber) }

    it "adds new subscriber to list" do
      expect do
        VCR.use_cassette("mailchimp/list") do
          post new_subscriber_path
        end
      end.to change(:subscriber, :count).by(1)
    end
  end
end

所做的更改,

  1. 将VCR呼叫移至期望区块
  2. 已更改为VCR.use_cassete
  3. 让我知道它是否有效。