我用rspec/capybara/vcr录磁带。当前,我的磁带将自动命名为包含正在运行的测试层次结构的简化版本,这是默认设置。
我想配置盒式磁带命名方案,使其依赖于请求的参数,因此任何带有xyz主体的put to/abc.com都将使用相同的磁带。我的想法是用这个配置录像机:
config.around_http_request do |request|
tape_name = Digest::SHA1.hexdigest [request.method, request.uri, request.headers.to_s, request.body.to_s].join('')
puts "Using tape #{tape_name}"
puts "on = #{VCR.turned_on?}"
VCR.use_cassette(tape_name, :record => :new_episodes, &request)
end
但当我这样做的时候,我最终会犯错误,比如:
There is already a cassette with the same name (5d971f35322c4e0cf7d379aa39a28ef12994552f). You cannot nest multiple cassettes with the same name.
如何用磁带的内容命名磁带并防止此错误?
最佳答案
我刚刚也遇到过同样的问题,根本原因似乎是磁带在某些请求(例如,在另一个块中使用VCR.use_cassette('whatever')
时)中以某种方式嵌套。所以,我试着把一个VCR.use_cassette('whatever')
放在eject_cassette
之前,它看起来工作得很好,例如在这个例子中:
VCR.eject_cassette(tape_name)
VCR.use_cassette(tape_name, :record => :new_episodes, &request)