VCR::Errors::UnhandledHTTPRequestError 在使用 VCR 的控制器测试中
VCR::Errors::UnhandledHTTPRequestError in a controller test using VCR
我正在尝试模拟一个 api 调用,我在其中上传了一个文件,我正在使用 Wistia Upload API 因为我不想每次测试都访问服务器,所以我第一次尝试 VCR。
我的 spec/controllers 文件夹中有以下测试:
let(:file) { Rack::Test::UploadedFile.new("video_path", 'video/mp4') }
describe "GET #index" do
it "assigns all videos as @videos" do
VCR.use_cassette "wistia/upload" do
video = Video.create! valid_attributes
get :index, {}
expect(assigns(:videos)).to eq([video])
end
end
end
结束
API 调用在如下所示的模型回调中触发:
class Video < ActiveRecord::Base
after_save :move_video
def move_video
uri = URI('https://upload.wistia.com/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
# Construct the request.
request = Net::HTTP::Post::Multipart.new uri.request_uri, {
'api_password' => '',
'project_id' => ''
'file' => my_video_file
}
# Make it so!
response = http.request(request)
return response
end
end
我已经调试了对该方法的调用,它被正确调用,但是当我 运行 我的测试时,我收到以下错误:
1) VideosController GET #index assigns all videos as @videos
Failure/Error: video = Video.create! valid_attributes
VCR::Errors::UnhandledHTTPRequestError:
================================================================================
An HTTP request has been made that VCR does not know how to handle:
POST https://upload.wistia.com/
VCR is currently using the following cassette:
- /Users/urielhernandez/Documents/pf/spec/vcr/wistia/upload.yml
- :record => :once
- :match_requests_on => [:method, :uri]
Under the current configuration VCR can not find a suitable HTTP interaction
to replay and is prevented from recording new requests. There are a few ways
you can deal with this:
* If you're surprised VCR is raising this error
and want insight about how VCR attempted to handle the request,
you can use the debug_logger configuration option to log more details [1].
* You can use the :new_episodes record mode to allow VCR to
record this new request to the existing cassette [2].
* If you want VCR to ignore this request (and others like it), you can
set an `ignore_request` callback [3].
* The current record mode (:once) does not allow new requests to be recorded
to a previously recorded cassette. You can delete the cassette file and re-run
your tests to allow the cassette to be recorded with this request [4].
* The cassette contains an HTTP interaction that matches this request,
but it has already been played back. If you wish to allow a single HTTP
interaction to be played back multiple times, set the `:allow_playback_repeats`
cassette option [5].
[1] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/configuration/debug-logging
[2] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/record-modes/new-episodes
[3] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/configuration/ignore-request
[4] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/record-modes/once
[5] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/request-matching/playback-repeats
================================================================================
磁带已创建,但我收到上述错误。我把卡带删除后看有没有生成,没有重新生成,VCR没有处理请求
正在按照错误消息中的描述在 /Users/urielhernandez/Documents/pf/spec/vcr/wistia/upload.yml
创建磁带。
尝试VCR.use_cassette("wistia/upload", :record => :new_episodes) do
;这会将其记录为同一个磁带中的新请求。
在 https://www.relishapp.com/vcr/vcr/v/1-3-2/docs/record-modes
查看有关录像机记录模式的更多信息
我正在尝试模拟一个 api 调用,我在其中上传了一个文件,我正在使用 Wistia Upload API 因为我不想每次测试都访问服务器,所以我第一次尝试 VCR。
我的 spec/controllers 文件夹中有以下测试:
let(:file) { Rack::Test::UploadedFile.new("video_path", 'video/mp4') }
describe "GET #index" do
it "assigns all videos as @videos" do
VCR.use_cassette "wistia/upload" do
video = Video.create! valid_attributes
get :index, {}
expect(assigns(:videos)).to eq([video])
end
end
end
结束
API 调用在如下所示的模型回调中触发:
class Video < ActiveRecord::Base
after_save :move_video
def move_video
uri = URI('https://upload.wistia.com/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
# Construct the request.
request = Net::HTTP::Post::Multipart.new uri.request_uri, {
'api_password' => '',
'project_id' => ''
'file' => my_video_file
}
# Make it so!
response = http.request(request)
return response
end
end
我已经调试了对该方法的调用,它被正确调用,但是当我 运行 我的测试时,我收到以下错误:
1) VideosController GET #index assigns all videos as @videos
Failure/Error: video = Video.create! valid_attributes
VCR::Errors::UnhandledHTTPRequestError:
================================================================================
An HTTP request has been made that VCR does not know how to handle:
POST https://upload.wistia.com/
VCR is currently using the following cassette:
- /Users/urielhernandez/Documents/pf/spec/vcr/wistia/upload.yml
- :record => :once
- :match_requests_on => [:method, :uri]
Under the current configuration VCR can not find a suitable HTTP interaction
to replay and is prevented from recording new requests. There are a few ways
you can deal with this:
* If you're surprised VCR is raising this error
and want insight about how VCR attempted to handle the request,
you can use the debug_logger configuration option to log more details [1].
* You can use the :new_episodes record mode to allow VCR to
record this new request to the existing cassette [2].
* If you want VCR to ignore this request (and others like it), you can
set an `ignore_request` callback [3].
* The current record mode (:once) does not allow new requests to be recorded
to a previously recorded cassette. You can delete the cassette file and re-run
your tests to allow the cassette to be recorded with this request [4].
* The cassette contains an HTTP interaction that matches this request,
but it has already been played back. If you wish to allow a single HTTP
interaction to be played back multiple times, set the `:allow_playback_repeats`
cassette option [5].
[1] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/configuration/debug-logging
[2] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/record-modes/new-episodes
[3] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/configuration/ignore-request
[4] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/record-modes/once
[5] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/request-matching/playback-repeats
================================================================================
磁带已创建,但我收到上述错误。我把卡带删除后看有没有生成,没有重新生成,VCR没有处理请求
正在按照错误消息中的描述在 /Users/urielhernandez/Documents/pf/spec/vcr/wistia/upload.yml
创建磁带。
尝试VCR.use_cassette("wistia/upload", :record => :new_episodes) do
;这会将其记录为同一个磁带中的新请求。
在 https://www.relishapp.com/vcr/vcr/v/1-3-2/docs/record-modes
查看有关录像机记录模式的更多信息