首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带水豚的vcr -webkit

带水豚的vcr -webkit
EN

Stack Overflow用户
提问于 2012-06-27 03:13:26
回答 2查看 3K关注 0票数 14

我正在使用capybara-webkit测试与第三方网站的集成(我需要javascript)。

我想使用vcr来记录在集成测试期间发出的请求,但是capybara-webkit不能通过net http,所以vcr无法记录它们。我该如何为录像机编写一个适配器,使我能够记录这些请求?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 03:57:15

不幸的是,VCR与水豚webkit非常不兼容。事实上,capybara webkit使用的是webkit,它位于c。Webmock和Fakeweb,这是VCR的基础,只能用于Ruby web请求。让两者协同工作可能是一项艰巨的任务。

我用两种方法解决了这个问题:

第一个步骤(很麻烦,但很有效)是将一个新的javascript文件添加到仅包含在测试环境中的应用程序中。这个文件清除了发出外部web请求的JS类。除了这种方法的纯粹的繁琐之外,它还要求每次添加或更改新请求时,您都必须更改存根。

第二种方法是通过我自己的服务器路由所有外部请求,有效地通过我的服务器代理所有外部请求。这有一个巨大的缺点,那就是你必须对你想要消费的所有东西都有一个动作(你可以通过一些工作来推广它)。它还受到这样一个事实的影响,即它可能会使请求完成的时间增加一倍。然而,既然请求现在是由Ruby提出的,你就可以使用VCR了。

在我的情况下,方法#2对我更有利,因为我需要ruby来操作数据,这样我就可以保持我的javascript源代码不可知。然而,我在相当长的一段时间内成功地使用了#1方法。

票数 15
EN

Stack Overflow用户

发布于 2012-10-15 22:31:09

我已经为rspec+capybara编写了一个小型ruby库(puffing-billy),它就能做到这一点--它在您的浏览器和外部世界之间注入一个代理,并允许您伪造对特定请求的响应。

示例:

代码语言:javascript
复制
describe 'fetching badges from stackoverflow API' do
  it 'should show a nice message when you have no badges' do
    # stub some JSONP
    proxy.stub('http://api.stackoverflow.com/1.1/users/1/badges',
               :jsonp => { :badges => [] })

    visit '/my_badges'
    page.should have_content("You don't have any badges :(")
  end
end
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11214386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档