gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:57 26 4
gpt4 key购买 nike

我们最近开始使用 VCR在我们的 cucumber 测试中 stub 请求。我们使用 Cucumber 表来描述不同类型的请求,并使用 gherkin 将它们存储为变量。我们的盒式磁带文件都经过重新设计以包含 erb,这样我们就可以用我们想要测试的请求的值来代替。

问题是每当有新请求时,VCR 都会记录新请求并覆盖(删除)盒式磁带中的所有 erb,将其替换为为该示例插入的请求。每次我们运行一个值发生变化的请求时(比如,我们从我们正在与之交谈的 API 收到的时间戳的值),所有的 erb 都需要被复制回 cassette 文件。这令人沮丧,因为测试一直在运行。

有谁知道为什么 VCR 在记录新响应时会去掉 erb?任何解决方法的想法?有什么方法可以在插入模板之前将其保存回模板吗?

最佳答案

自动将您对磁带的手动更改与新录制的磁带合并是一个难题,在我看来,最好留给专门设计用于处理文本文档历史记录并管理合并它们的工具(即您的源控制系统)。 ERB 使它变得更加困难:虽然您可能只是使用 ERB 来插入变量,但可以使用任何有效的 ruby​​。 ERB 中可能存在循环、条件等等。 VCR 无法自动合并这些内容。

一些建议:

  • 以更精细的方式使用你的磁带,这样它们就不会被频繁覆盖。我倾向于为每个 HTTP 请求或 HTTP 请求的逻辑组使用一个 casette。
  • 使用:once记录模式(最近的默认设置)以防止现有的磁带被覆盖。
  • 看看 sensitive data filtering录像机的特点。这远不如 ERB 灵活(即你不能使用循环、条件或任何任意 ruby​​ 代码),但对于简单的变量插值,它确实非常非常好用。它不使用 ERB,而是使用占位符字符串——您可以使用类似 <PASSWORD> 的字符串例如,代替密码。 VCR 在录制磁带时自动负责插入占位符文本,并在播放时用正确的实际值替换它。
  • 如果这不能满足您的需求,before_record and before_playback hooks应该为您提供在录制磁带时进行自动插值(甚至插入 ERB 片段)所需的所有功能。这基本上就是过滤的工作原理——参见 here .

如果这些东西不能满足您的需求,我当然愿意接受如何改进 VCR 的想法。

关于ruby-on-rails - 如何阻止 VCR 覆盖磁带中的 erb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com