我已经在这个领域做了一些研究,但没有找到任何解决方案.我有一个网站,在那里对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) 我正在使用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
任何帮助,将不胜感激.
我正在使用capybara-webkit来测试与第三方网站的集成(我需要javascript).
我想使用vcr来记录在集成测试期间发出的请求,但是capybara-webkit不会覆盖net http,因此vcr无法记录它们.我如何为vcr编写一个适配器,以便记录所需的内容?
在我的黄瓜支持目录中,我在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?
我有一个非常简单的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) 我正在使用录像机记录我正在整合的其他系统的响应.
但是,这个响应获得了一个巨大的JSON,VCR正在以二进制格式保存它:
body:
encoding: ASCII-8BIT
string: !binary |-
eyJsaXN0IjpbXSwiZmFjZXRzIjpbeyJuYW1lIjoiU2FsZXNDaGFubmVsTmFt
ZSIsInR5cGUiOi...
Run Code Online (Sandbox Code Playgroud)
有没有办法我只能将响应体保存为JSON?
我想这样做来编辑返回的JSON,以便为我的测试制作其他场景,
谢谢
我正在查看通过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都没有发现.
深入研究视点宝石,我发现请求对象除了:HTTPClient和 WebMockHTTPClient预期之外没有任何区别.
我正在使用 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 …