我正在使用rspec / capybara / VCR录制磁带。目前,我的磁带会自动命名为包含正在运行的测试层次结构的简化版本,默认情况下也是如此。
我想配置磁带命名方案,以便它依赖于请求的参数,因此任何带有XYZ主体的/ abc.com的PUT都将使用相同的磁带。我的想法是配置VCR:
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.
如何使用其中包含的内容命名磁带并防止出现此错误?
答案 0 :(得分:0)
我刚刚遇到了同样的问题,看来根本原因是在某些请求期间盒式磁带以某种方式嵌套(例如,在另一个VCR.use_cassette('whatever')
块中使用VCR.use_cassette('whatever')
)。因此,我尝试将eject_cassette
放在use_cassette
之前,它似乎可以正常工作,例如在这种情况下:
VCR.eject_cassette(tape_name)
VCR.use_cassette(tape_name, :record => :new_episodes, &request)