Воспроизведение кассеты, чей запрос не находится в области видимости 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