问题标签 [vcr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3904 浏览

ruby - VCRProxy:在 Capybara 内使用 VCR 记录 PhantomJS ajax 调用

我已经在这个领域做了一些研究,但没有找到任何解决方案。我有一个站点,其中对 facebook 进行异步 ajax 调用(使用 JSONP)。我正在使用 VCR 在 Ruby 端记录我的所有 HTTP 请求,所以我认为将这个功能也用于 AJAX 调用会很酷。

所以我玩了一下,想出了一个代理尝试。我使用 PhantomJS 作为无头浏览器和 poltergeist 用于 Capybara 内部的集成。Poltergeist 现在配置为使用这样的代理:

出于测试目的,我编写了一个基于 WEBrick 的代理服务器,它集成了 VCR:

这适用于每个 localhost 调用,并且它们得到了很好的记录。HTML、JS 和 CSS 文件由 VCR 录制。然后我启用了该c.ignore_localhost = true选项,因为(在我看来)记录本地主机调用没有用。

然后我再次尝试,但我必须弄清楚,在页面上进行的 AJAX 调用没有被记录。更糟糕的是,它们不再在测试中工作。

所以说到重点,我的问题是:为什么所有对本地主机上的 JS 文件的调用都被记录了,而 JSONP 对外部资源的调用却没有?它不可能是 jsonP 的东西,因为它是一个“正常”的 ajax 请求。或者 phantomjs 内部是否存在错误,即 AJAX 调用没有被代理?如果是这样,我们该如何解决?

如果它正在运行,我想在里面集成启动和停止程序

- - - - 更新 - - - -

我做了一些研究,得出了以下几点:代理在HTTPS调用和通过HTTPS调用的二进制数据方面存在一些问题。

我启动了服务器,并进行了一些 curl 调用:

该呼叫将按应有的方式记录下来。代理的请求和响应输出是

但是这个调用没有被记录,肯定是 HTTPS 有问题:

头文件输出为:

所以,我想也许代理不能处理 HTTPS,但它可以(只要我在 cURL 调用后得到控制台上的输出)。然后我想,也许 VCR 不能模拟 HTTPS 请求。但是使用这个脚本,当我不在代理中使用它时,VCR 会模拟 HTTPS 请求:

那么问题是什么?VCR 处理 HTTPS,代理处理 HTTPS。为什么他们不一起玩?

0 投票
2 回答
1126 浏览

ruby - 如何在主机分割的不同磁带中录制/播放?

在我正在进行的项目中,我们使用 VCR 来存储本地和外部服务的磁带。本地的是不断修改的微服务,而外部的几乎没有修改。

由于这个原因,再加上外部服务需要很长时间才能重新录制,这对我们大部分时间只重新录制本地磁带是有意义的。

为了解决这个问题,我们尝试在不同的文件夹(cassettes/localhost 和cassettes/external/sample.com)中分离磁带。

然后我们想出了:

但问题是我们有一些测试需要重复请求(完全相同的请求),服务器返回不同的结果。因此,使用上面的代码可以为每个 http 调用重置磁带。第一个请求被记录下来,第二个是第一个请求的回放,即使预期的响应会有所不同。

然后我们尝试了一种使用标签和嵌套磁带的不同方法:

但这也行不通。结果是所有 localhost 请求都记录在内部磁带上。VCR 忽略了其余的请求。

那么你有什么建议来解决这个问题吗?

0 投票
1 回答
106 浏览

ruby-on-rails - 如何自动定期运行我的规范并在它们失败时得到通知?

我写了一个食谱屏幕刮板。由于屏幕抓取工具很容易破解,我编写了一些规范来测试各种网站的预期输出。在我的开发环境中,我使用的是VCR,所以我不必一直打电话到这些网站。

问题是这并不能真正告诉我食谱网站是否改变并破坏了我的刮刀。我可以定期刷新磁带,我会这样做,但我想更加积极主动。我想以某种方式每天运行这些特定的规范,并在它们失败时收到结果通知,这样我就可以回去修复刮板

0 投票
1 回答
7021 浏览

ruby - 录像机不录制磁带

我有一个非常简单的module我正在使用 VCR gem 使用 Ruby 进行测试。

我已经根据文档配置了 VCR,但似乎无法在磁带目录中录制磁带。为了以防万一,我什至将盒式磁带目录的权限更改为 777。真正奇怪的是,我已经完全删除了盒式磁带目录,运行规范,然后创建了一个新的盒式磁带目录。

我正在使用Typhoeus0.4.2 和Hydra. 我目前无法升级 Typhoeus。

相关代码:

我不知道为什么不写磁带。

0 投票
2 回答
854 浏览

ruby-on-rails-3.2 - 如何使用 rspec 测试不良的网络连接

我想测试与外部 api 的连接错误。最好的方法是什么?

在我的控制器中,我有

我想测试错误是否显示给用户。

0 投票
0 回答
824 浏览

c# - NUnit 的 VCR 等效项

我们使用 C# 和 .net 编写了一个基本的网络应用程序。对于测试,我们喜欢使用类似于Ruby 的 VCR 的东西。C#/.net 是否存在这样的事情?

0 投票
1 回答
2066 浏览

ruby-on-rails - 应用程序在开发环境中运行时未初始化的常量 VCR

我正在使用 VCR 来加快我在 rails 应用程序中的测试,它在测试环境中就像一个魅力

但是,当我在开发环境中实际浏览该站点,当我到达

我可以通过在我的 config/application.rb 中要求 VCR 来解决这个问题

但这感觉不是正确的解决方案......

这不会强制应用程序在我所有的 RAILS_ENV 中使用磁带吗?

我只想在我的测试环境中使用我的 VCR 磁带,而不是在我的应用程序运行的任何其他环境中。

什么是最好的解决方案?

0 投票
2 回答
968 浏览

ruby-on-rails - 编写 Rails 集成测试/规范时如何存根外部 JavaScript 库?

我的应用程序与谷歌地图接口进行地理编码和条纹支付。使用VCR,我模拟了对这些服务的所有请求,效果很好。但是两者的库仍在javascript_include_tags 中加载。处理这个问题的最佳方法是什么,以便集成测试可以完全脱离互联网运行?

0 投票
1 回答
409 浏览

ruby - Ruby TestUnit、VCR 和 HTTP API 请求

我正在构建一个 API 包装器并为它编写一些测试,我有几个问题。

1)我如何assert为不存在数据的调用编写一个?例如,使用 API 通过 id 查找成员,但该用户尚不存在。
2)我如何编写assert测试PUTDELETE请求?

我已经掌握了测试GETPOST请求,只是不确定其他 2 个动词。

0 投票
3 回答
2720 浏览

ruby-on-rails - vcr 不知道如何处理这个请求

嗨,我正在尝试使用带有标签的 vcr 用黄瓜测试谷歌身份验证。

一切都很好,直到令牌过期。我认为当它到期时会发生这种情况

在此处输入图像描述

但我有一个包含此内容的文件

如果我允许 vcr 录制新请求,则此磁带的内容会更改。我不明白为什么,如果方法和 uri 没有将 POST 更改为https://accounts.google.com/o/oauth2/token

我更改了标签以录制新剧集,现在测试通过了……我一无所知。

我再次运行测试,现在当 POST 到令牌 url 完成时我有了这个: