ruby-on-rails – 如何阻止VCR覆盖磁带中的erb

ruby-on-rails – 如何阻止VCR覆盖磁带中的erb,第1张

概述我们最近开始在我们的黄瓜测试中使用 VCR来存根请求.我们使用黄瓜表来描述不同类型的请求,并将它们作为变量存储在小黄瓜中.我们的磁带文件都经过重新设计以包含erb,因此我们可以替换我们要测试的请求的值. 问题在于,只要有新请求,VCR就会记录新请求,并且还会从磁带中覆盖(删除)所有erb,将其替换为针对该示例插入的请求.每当我们运行值已更改的请求(例如,我们从我们正在讨论的API接收的时间戳的值) 我们最近开始在我们的黄瓜测试中使用 VCR来存根请求.我们使用黄瓜表来描述不同类型的请求,并将它们作为变量存储在小黄瓜中.我们的磁带文件都经过重新设计以包含erb,因此我们可以替换我们要测试的请求的值.

问题在于,只要有新请求,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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1278116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存