标签: vcr

VCRProxy:在Capybara内用录像机录制PhantomJS ajax电话

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

所以我玩了一下,并提出了代理尝试.我正在使用PhantomJS作为Capybara内部集成的无头浏览器和恶作剧者.Poltergeist现在配置为使用这样的代理:

  Capybara.register_driver :poltergeist_vcr do |app|
    options = {
      :phantomjs_options => [
        "--proxy=127.0.0.1:9100",
        "--proxy-type=http",
        "--ignore-ssl-errors=yes",
        "--web-security=no"
      ],
      :inspector => true
    }
    Capybara::Poltergeist::Driver.new(app, options)
  end
  Capybara.javascript_driver = :poltergeist_vcr
Run Code Online (Sandbox Code Playgroud)

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

require 'io/wait'
require 'webrick'
require 'webrick/httpproxy'

require 'rubygems'
require 'vcr'

module WEBrick
  class VCRProxyServer < HTTPProxyServer
    def service(*args)
      VCR.use_cassette('proxied') { super(*args) }
    end
  end
end

VCR.configure do |c|
  c.stub_with :webmock
  c.cassette_library_dir = '.'
  c.default_cassette_options = { :record => :new_episodes }
  c.ignore_localhost = true
end

IP   = '127.0.0.1'
PORT = 9100

reader, writer …
Run Code Online (Sandbox Code Playgroud)

ruby ajax https phantomjs vcr

44
推荐指数
1
解决办法
3694
查看次数

Ruby的VCR库是否有python替代品?

我想使用Ruby的VCR库Betamax的令人敬畏的"记录/回放"机制用于JVM.是否有一个Python库以相同的方式工作?如果没有,您如何测试您的REST客户端调用,而不必担心测试缓慢和片状?

python testing integration-testing vcr

20
推荐指数
2
解决办法
2283
查看次数

15
推荐指数
3
解决办法
4160
查看次数

使用VCR过滤敏感数据

我正在使用VCR gem记录http交互,并在将来重播它们.我想在uri请求中过滤掉我的实际密码值.这是uri的样子:

http://services.somesite.com/Services.asmx/Cabins
Username=long&Password=john&StartDate=03%2F22%2F2012&EndDate=03%2F29%2F2012
Run Code Online (Sandbox Code Playgroud)

虽然这里提供了一个解释,但我仍然不确定自己经过几次尝试后该怎么做:

https://www.relishapp.com/myronmarston/vcr/v/2-0-0/docs/configuration/filter-sensitive-data

任何帮助,将不胜感激.

ruby testing rspec ruby-on-rails-3 vcr

15
推荐指数
2
解决办法
2406
查看次数

vcr与capybara-webkit

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

我想使用vcr来记录在集成测试期间发出的请求,但是capybara-webkit不会覆盖net http,因此vcr无法记录它们.我如何为vcr编写一个适配器,以便记录所需的内容?

ruby capybara-webkit vcr

14
推荐指数
2
解决办法
2954
查看次数

Ruby VCR gem会记录相同的请求

在我的黄瓜支持目录中,我在vcr.rb中有以下内容:

require 'vcr'

VCR.configure do |c|
  c.cassette_library_dir = 'fixtures/vcr_cassettes'
  c.hook_into :webmock
  c.ignore_localhost = true
  c.default_cassette_options = { record: :new_episodes }
end
Run Code Online (Sandbox Code Playgroud)

我正在对城市名称进行地理编码,从而调用Google Maps API.我正在尝试记录和存根这些请求,但它会将相同的请求记录到同一个yml文件中:

- request:
    method: get
    uri: http://maps.googleapis.com/maps/api/geocode/json?address=Miami,%20FL&language=en&sensor=false
    body:
      encoding: US-ASCII
      string: ''
    headers:
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - ! '*/*'
      User-Agent:
      - Ruby
  # response...

- request:
    method: get
    uri: http://maps.googleapis.com/maps/api/geocode/json?address=Miami,%20FL&language=en&sensor=false
    body:
      encoding: US-ASCII
      string: ''
    headers:
      Accept-Encoding:
      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
      Accept:
      - ! '*/*'
      User-Agent:
      - Ruby
Run Code Online (Sandbox Code Playgroud)

它是相同的URL和非常相同的请求,不应该VCR存根请求?每当我尝试搜索同一个城市时,如何防止我的规范访问API?

ruby rspec ruby-on-rails cucumber vcr

12
推荐指数
2
解决办法
5492
查看次数

录像机没有录像带

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

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

我正在使用Typhoeus0.4.2 Hydra.我此刻无法升级Typhoeus.

相关代码:

require 'rspec'                                                                     
require 'vcr'                                                                       
require_relative File.join("..", "crawl_handler")                                   

VCR.configure do |c|                                                                
  c.cassette_library_dir = "spec/vcr_cassettes"                                     
  c.hook_into :fakeweb                                                              
  c.allow_http_connections_when_no_cassette = false                                 
end

... # => other describe statements
 describe "#handle_http_response" do                                               
    before(:each) do                                                                
      get_some_response = lambda {                                                  
        # NOTE: typhoeus v. 0.5 is MUCH less setup :)                               
        VCR.use_cassette("bme") do                                                  
          request = Typhoeus::Request.new("www.bing.com")                           
          hydra = Typhoeus::Hydra.new                                               
          hydra.queue(request)                                                      
          hydra.run                                                                 
          response = request.response                                               
        end                                                                         
      }                                                                             
      @message = @subject.handle_http_response("www.bing.com", get_some_response.call)    
    end                                                                             

    it "returns a message hash" …
Run Code Online (Sandbox Code Playgroud)

ruby vcr

11
推荐指数
1
解决办法
5836
查看次数

如何编辑VCR gem返回的响应体?

我正在使用录像机记录我正在整合的其他系统的响应.

但是,这个响应获得了一个巨大的JSON,VCR正在以二进制格式保存它:

body:
  encoding: ASCII-8BIT
  string: !binary |-
    eyJsaXN0IjpbXSwiZmFjZXRzIjpbeyJuYW1lIjoiU2FsZXNDaGFubmVsTmFt
    ZSIsInR5cGUiOi...
Run Code Online (Sandbox Code Playgroud)

有没有办法我只能将响应体保存为JSON?

我想这样做来编辑返回的JSON,以便为我的测试制作其他场景,

谢谢

ruby-on-rails vcr

11
推荐指数
3
解决办法
3111
查看次数

使用vcr存根ViewPoint gem返回取消授权来自ews API的响应

我正在查看通过ViewPoint gem的所有请求.使用vcr gem.

require 'spec_helper'
require 'vcr'

describe CalendarImporters::Ews::Get do
  let(:conf_connection) { FactoryGirl.create(:conf_connection)}
  let(:calendar) { create(:calendar, :for_ews) }
  let(:connection) { Connections::Ews.new(conf_connection, calendar.ews_email) }

  it "works" do
    VCR.use_cassette("a/cassette") do
      connection.client.get_folder(:calendar)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

connection.client返回一个新ViewPoint连接.

我从gem返回的响应是:Viewpoint::EWS::Errors::UnauthorizedResponseError这相当于来自ews api的401未授权代码.

我发现了这个问题:https://github.com/vcr/vcr/issues/297

这是我遇到的完全相同的问题,但它已经3年了,没有解决方案.我所有的其他谷歌foo都没有发现.

深入研究视点宝石,我发现请求对象除了:HTTPClientWebMockHTTPClient预期之外没有任何区别.

rspec ruby-on-rails exchangewebservices vcr viewpoint

11
推荐指数
1
解决办法
247
查看次数

在一次测试中使用多个带 V​​CR 的磁带

我正在使用 VCR 记录与外部 API 的 http 交互。这是我的(工作)代码:

it 'does xyz....' do
    hook_payload = {ruby_hash: 'here'}

    VCR.use_cassette('my_folder/create_project') do
      VCR.use_cassette('my_folder/get_project') do
        update = Update.new(hook_payload)
        expect { update.call }.to change { Projects.count }.by(1)
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但组织不好,因为我更喜欢expect{}在块外调用。所以,我试过这个,但下面的代码不起作用:

context 'my context', vcr: { group: 'my_folder', cassettes: %w[create_project get_project] } do
    it 'does xyz....' do
        hook_payload = {ruby_hash: 'here'}

        update = Update.new(hook_payload)
        expect { update.call }.to change { Projects.count }.by(1)
      end
Run Code Online (Sandbox Code Playgroud)

但是,此代码不起作用,并且出现以下错误:

VCR is currently using the following cassette: - /Users/me/this_project/spec/fixtures/vcr/my_folder/create_project.yml.

Under the …

ruby-on-rails vcr

11
推荐指数
1
解决办法
1627
查看次数