使用 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
我构建了一个 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