问题标签 [webmock]

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 投票
1 回答
109 浏览

ruby - 如何将数据与红宝石块一起传递?

我正在尝试将一些数据作为一个块传递给一些外部 API。让它接受额外的参数会很麻烦。如果是javascript,我可能会这样:

Ruby可以做到这一点吗?或者我应该如何将一些数据与块相关联?

不确定对问题的编辑是否正确。首先,如果可能的话,我想专门传递一些数据和一个块。不确定是否是这样。并且可能唯一的方法ruby是将一些数据作为块传递。

此外,这里可能会提供一些有用的信息。

好的,展示整个画面可能是有意义的。我正在努力适应webmock我的需求。我有一个函数,它检查请求的参数(无论是POST还是GET)是否匹配指定的条件:

它并不完美,但目前足以满足我的特殊需求。我这样称呼它:

事情通常是我看不到输出with block条件的明智方法。但在我的特殊情况下,可以只输出options哈希。而不是这个:

有这个:

这就是我想要做的。

0 投票
1 回答
946 浏览

ruby-on-rails-4 - 存根谷歌地方调用 selenium v​​s capybara-webkit

我将Capybaraselenium AND/OR capybara -webkit驱动程序和 Webmock 一起用作存根框架。

当我使用 selenium (firefox) 为谷歌地图(地点)自动完成输入运行集成测试时,浏览器会对谷歌进行一些真正的调用,并接收带有地点组件的 JSON。

当我更改为 capybara-webkit 驱动程序(muuuuch 更快)执行相同操作时,我收到 webmock 消息,我应该存根外部请求。

有人可以解释一下为什么两者之间有区别吗?

注意:我设置WebMock.disable_net_connect!( :allow_localhost => true )为允许调用本地服务器...

编辑:

WebMock 之类的工具很棒,但是在测试 JavaScript 时,它是一个单独的浏览器进程来加载页面,而不是您的 Ruby 测试进程。这意味着对构建服务器的请求不会通过 Net::HTTP;请求来自 Firefox 或 capybara-webkit,这些工具兴高采烈地不知道您尝试重新路由 HTTP 流量的微弱尝试

引自http://robots.thoughtbot.com/using-capybara-to-test-javascript-that-makes-http

这解释了为什么对支付系统的某些调用(在 Rails 控制器中完成)需要存根,以及为什么 ajax 不需要存根,但它没有解释为什么 Firefox 到达 Google 而 webkit 要求存根

解决方案:

TL;博士; 保持 :selenium 并在需要对外部 API 进行 ajax 调用的测试中进行真正的调用

我尝试使用用于 JS/浏览器外部调用的 puffing-billy 进行模拟,但是这个与 Webmock 不能“很好地合作”。我也有 25 个用于支付系统的存根,已经用 Webmock 编写,所以我没有办法切换......

我还尝试了录制框架的 VRC,但这也适用于您的应用程序(Ruby NET 库)进行的调用

最后,我只是决定使用 :selenium 驱动程序继续运行这几个需要 ajax API 响应的测试,该驱动程序启动 firefox 并真正调用 gMaps

0 投票
0 回答
487 浏览

ruby-on-rails - Webmock 和 VCR,如果没有磁带,则允许 Http 连接

我有一个问题,我可以运行一个单独使用 vcr 的测试并且它可以工作,它会创建磁带并在下一次测试中使用它。伟大的。

问题是当我一起运行所有测试时,这个特定的测试失败了,因为 webmock 禁用了 http 连接,我在 Github repo 页面上看到了这个例子,它解释了如何期待真实的而不是存根的请求

我的问题是我该怎么说:除非有磁带,否则允许请求的 Http 连接。当允许 HTTP 连接时,它还应该创建盒式磁带。

录像机设置

上面的 if 语句存在,因为不是每个测试都创建一个磁带。所以我们希望它们在不需要磁带时运行。

考试

自行运行良好,创建磁带,由于 webmock 与所有其他测试一起运行时失败。

失败

0 投票
1 回答
159 浏览

unit-testing - 一个测试用例似乎干扰了另一个测试用例

这是在 Rails 4.0.11 上。我正在使用 minitest 和 webmock 为与 API 交互的工作人员编写测试。我的测试文件中有两个测试用例(到目前为止)。当我运行这两个测试时,第二个(标题中带有“成功”的那个)失败了。当我注释掉通过的测试(标题中带有“重试”的测试)时,失败的测试用例通过了。似乎测试用例相互干扰,但我不明白如何。

(我在这些代码示例中混淆了公司机密数据。嗨,老板!)

这是测试:

这是工人:

这是我的终端输出:

运行两个测试用例:

注释掉第一个(“重试”)测试用例:

当我同时运行这两个测试并binding.pry在工作人员中使用(在此处注释掉)来检查response“成功”测试用例(失败的测试用例)期间的值时,我得到以下两个结果。在这两种情况下,我都希望得到相同的结果(第二个)。

运行两个测试用例:

注释掉第一个(“重试”)测试用例:

最后一个示例中的响应值是我希望它在“重试”测试用例的第一次迭代期间的值,而不是在“成功”用例期间的值。

我尝试将 setup 方法中的内容移动到sample_response_body您在此处看到的常量和方法中。我也尝试添加这个拆解方法,但它没有帮助:

我正在从头开始编写工作程序和测试,所以我完全有可能在某处有一个愚蠢的语法/逻辑错误。对于这个可能过于冗长的问题,我深表歉意,但这真的让我把头发扯掉了。感谢您的帮助。谢谢。

0 投票
1 回答
159 浏览

ruby-on-rails-4 - VCR + Webmock + net_http + NTLM 在没有猴子补丁的情况下无法工作

为了让 NTLM 与 Webmock + net_http 一起工作,我需要启用 net_http_connect_on_start 选项。例如,在控制台或规范的开头,我可以使用:

但录像机配置只允许

为了让我的测试规范正常工作,我在 WebMock 上做了一个猴子页面:

我希望能够配置 VCR 以传递该选项而不是猴子补丁。

我挖掘了 VCR 代码,但找不到任何地方可以修改它并提交拉取请求。

这是录像机的问题,还是我遗漏了什么?

0 投票
1 回答
2124 浏览

ruby - Ruby - Webmock:使用正则表达式匹配 URI

我正在使用 rspec 和 webmock,并且正在研究存根请求。当我尝试使用正则表达式匹配 URI 时,我确实遇到了问题。

当我使用下面的存根时一切正常,没有匹配特定的 URI (/.*/)

由于我想在测试中更加具体以提高可读性,因此如果我尝试 使用以下存根匹配这个特定的 URI: /insertion_order/012awQQd?fields=name,type&depth=4 :

运行我得到的测试:

我使用的正则表达式是正确的,但我不明白为什么会收到此错误消息。

0 投票
1 回答
2331 浏览

ruby-on-rails - 让 Webmock 存根 HTTParty 请求

我无法让 Webmock 正常工作。我正在使用 HTTParty 发出 GET 请求。我想让以下请求返回错误:

我在 spec_helper.rb 中添加了以下几行:

但它仍在调用实际的 API 并且没有被存根。我没有收到预期的 401 错误。我不确定这里有什么问题。spec_helper 是否遗漏了什么?

更新:我做了一些测试,看起来require api_parser是导致这个问题的原因。当我删除它时,存根工作,但当我添加它时它停止工作。ApiParser 类是我使用 HTTParty 的地方。我修改了上面的测试直接使用HTTParty,而不是使用类中的方法。

0 投票
0 回答
931 浏览

ruby-on-rails - Webmock 没有捕获外部 API 调用

作为新黄瓜测试的一部分,我需要模拟一个外部 API 请求。我通常的做法是先编写发出调用的测试,然后期望 WebMock 抱怨它。然后使用 WebMock 提供的信息,存根请求。

但是在这个 repo 中(这对我来说是新的),WebMock 不会拦截请求。它只是超时。更奇怪的是,它的行为完全符合我在 rspec 中的预期(它拦截了我的请求尝试,并告诉我如何模拟它),但在 cucumber 中却没有。

我有这个features\support\webmock.rb:

我也尝试将同一行放入features\support\env.rb. 仍然允许请求。

当然,我可以弄清楚如何以另一种方式存根,但是如果我犯了错误,我的测试可能会进行实时调用,这让我很困扰。任何人都可以帮忙吗?

更新:

我已经确定这(:allow_localhost => true) 确实阻​​止了外部请求的发出,但它不会触发显示错误请求的 WebMock 机制(我假设通过抢救异常),而是请求只是超时。还是不知道为什么。

更新 2:

我发现了问题。此 repo 使用自定义客户端 gem 与另一个内部服务通信。该 gem 挽救了连接错误,因此 webmock 错误被吞没了。

0 投票
1 回答
1688 浏览

ruby-on-rails-4 - 存根 500 错误

我遇到了 webmocks 存根的问题。

这是一个使用 devise/cancan 进行身份验证和授权的 Rails 4 应用程序。我正在使用 RSpec 编写测试。

我有一个(为了这篇文章的原因而简化了!)我想运行的测试。

在完整的测试套件中,expect 语句之上的所有内容都是使用 let 或 set in before 块设置的。我试图将其提炼成最小的选项,但测试仍然失败。

问题

我期待

始终返回 500 状态响应,但它返回 200。

我的预期正确吗?这是应该如何调用 webmocks 的吗?

0 投票
1 回答
539 浏览

ruby-on-rails - How to register a request stub using 80 port with webmock?

I am using webmock to stub and set expectations on HTTP requests in Ruby. Also I am using rspec.

Here is my spec/feature/***.rb's code:

But after I run my rspec test code, the error was: