使用 Rails 的 VCR 播放请求不在 use_cassete 范围内的磁带

Playing a cassete whose request is not inside the use_cassete scope using VCR for Rails

我构建了一个 API (MyAPI) 连接到外部 API 以进行身份​​验证 (ExAPI)。

对于MyAPI所有需要用户认证的请求,他发送一个带有token的cookie,然后发送给ExAPI,然后ExAPI获取用户信息.

我已经根据这个要求录制了一盒磁带:

describe 'VCR-RSpec integration' do
  def make_http_request
    connect = Faraday.new(url: (ENV['EX_API']).to_s) do |faraday|
      faraday.request :url_encoded
      faraday.response :logger 
      faraday.adapter Faraday.default_adapter 
    end
    connect.authorization :Bearer, ENV['USER_TOKEN']
    connect.get('/auth/...')
  end

  skip 'without an explicit cassette name' do
    it 'records an http request' do
      VCR.use_cassette('user_token') do
        expect(make_http_request).to be_success
      end
    end
  end
end

所以,在我的代码中,如果我调用 user_stories 它期望带有 user_token 的 cookie 将其发送到 ExAPI 如果有效,则执行所需的动作。

规范是这样的:

describe UserStoriesController, type: :controller do
  before(:each) do
    set_cookies
  end

  context do
    let!(:user) {
      FactoryGirl.create(:user)
    }
    let!(:some_user_stories) {
      FactoryGirl.create_list(:user_story, 3, user: user)
    }

    describe 'GET index' do
      it 'returns a successful 200 response' do
        VCR.use_cassette('user_token') do
          get :index
          expect(response).to be_success
        end
      end
    end
  end
end

问题是没有使用盒式磁带(我假设这是因为连接到 ExAPI 的代码不在 VCR.use_cassete 范围内,而是在方法内控制器。

这是一种方法吗?

谢谢

好吧,我错了。我忘了初始化 VCR:

VCR.configure do |config|
  config.cassette_library_dir = "fixtures/vcr_cassettes"
  config.hook_into :webmock
end