Воспроизведение кассеты, чей запрос не находится в области видимости use_cassete, с использованием VCR для Rails

Я построил API (MyAPI), который подключается к внешнему API для аутентификации (ExAPI).

Для всех запросов к MyAPI, где пользователь должен пройти аутентификацию, он отправляет cookie с токеном, который затем отправляется в 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 отправляет его в 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 область действия, но в методе внутри контроллера.

Это способ сделать это?

Спасибо

1 ответ

Решение

Хорошо моя ошибка Я забыл инициализировать видеомагнитофон:

VCR.configure do |config|
  config.cassette_library_dir = "fixtures/vcr_cassettes"
  config.hook_into :webmock
end
Другие вопросы по тегам