问题在于,只要有新请求,VCR就会记录新请求,并且还会从磁带中覆盖(删除)所有erb,将其替换为针对该示例插入的请求.每当我们运行值已更改的请求(例如,我们从我们正在讨论的API接收的时间戳的值)时,所有erb都需要被复制回盒式磁带文件.这是令人沮丧的,因为测试一直在运行.
有谁知道为什么VCR会在录制新的回复时剥掉erb?任何解决方法的想法?有没有办法在插入模板之前保存模板?
解决方法 使用新录制的磁带自动将手动更改合并到磁带上是一个难题,在我看来,最好留给专门设计用于处理文本文档历史并管理合并它们的工具(即您的源控制系统) . ERB使其变得更加困难:虽然您可能只是使用ERB来插入变量,但可以使用任何有效的ruby. ERB中可能存在循环,条件等. VCR无法自动合并这些内容.一对建议:
>以更精细的方式使用您的磁带,这样它们就不会经常被覆盖.我倾向于为每个http请求或http请求的逻辑组使用一个casette.
>使用:一次记录模式(最近的默认值)以防止现有磁带被覆盖.
>看一下VCR的sensitive data filtering功能.这远不如ERB灵活(即你不能使用循环,条件或任何任意ruby代码),但对于简单的变量插值,它确实非常,非常好.它不使用ERB,而是使用占位符字符串 – 您可以使用类似< PASSWORD>的字符串.例如,取代密码.录像机在录制录像带时自动插入占位符文本,并在播放时将其替换为正确的实际值.
>如果这不符合您的需要,before_record and before_playback hooks应该为您提供在录制磁带时进行自动插值(甚至ERB片段插入)所需的所有功能.这基本上就是过滤的工作方式 – 见here.
如果这些东西不能满足您的需求,我当然愿意接受如何改进VCR的想法.
总结以上是内存溢出为你收集整理的ruby-on-rails – 如何阻止VCR覆盖磁带中的erb全部内容,希望文章能够帮你解决ruby-on-rails – 如何阻止VCR覆盖磁带中的erb所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)