- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
情况:使用 Rspec、FactoryGirl 和 VCR 测试 Rails 应用程序。
每次创建用户时,都会通过 Stripe 的 API 创建关联的 Stripe 客户。测试时,添加 VCR.use_cassette
或 describe "...", vcr: {cassette_name: 'stripe-customer'} do ...
到涉及用户创建的每个规范。我的实际解决方案如下:
RSpec.configure do |config|
config.around do |example|
VCR.use_cassette('stripe-customer') do |cassette|
example.run
end
end
end
但这是不可持续的,因为每个 http 请求都会使用同一个盒式磁带,这当然是非常糟糕的。
问题如何根据个人要求使用特定的夹具(暗盒),而不是为每个规范指定暗盒?
我有这样的想法,伪代码:
stub_request(:post, "api.stripe.com/customers").with(File.read("cassettes/stripe-customer"))
相关代码片段(作为 gist ):
# user_observer.rb
class UserObserver < ActiveRecord::Observer
def after_create(user)
user.create_profile!
begin
customer = Stripe::Customer.create(
email: user.email,
plan: 'default'
)
user.stripe_customer_id = customer.id
user.save!
rescue Stripe::InvalidRequestError => e
raise e
end
end
end
# vcr.rb
require 'vcr'
VCR.configure do |config|
config.default_cassette_options = { record: :once, re_record_interval: 1.day }
config.cassette_library_dir = 'spec/fixtures/cassettes'
config.hook_into :webmock
config.configure_rspec_metadata!
end
# user_spec.rb
describe :InstanceMethods do
let(:user) { FactoryGirl.create(:user) }
describe "#flexible_name" do
it "returns the name when name is specified" do
user.profile.first_name = "Foo"
user.profile.last_name = "Bar"
user.flexible_name.should eq("Foo Bar")
end
end
end
我结束了这样的事情:
VCR.configure do |vcr|
vcr.around_http_request do |request|
if request.uri =~ /api.stripe.com/
uri = URI(request.uri)
name = "#{[uri.host, uri.path, request.method].join('/')}"
VCR.use_cassette(name, &request)
elsif request.uri =~ /twitter.com/
VCR.use_cassette('twitter', &request)
else
end
end
end
最佳答案
VCR 2.x 包含专门用于支持此类用例的功能:
https://relishapp.com/vcr/vcr/v/2-4-0/docs/hooks/before-http-request-hook ! https://relishapp.com/vcr/vcr/v/2-4-0/docs/hooks/after-http-request-hook ! https://relishapp.com/vcr/vcr/v/2-4-0/docs/hooks/around-http-request-hook !
VCR.configure do |vcr|
vcr.around_http_request(lambda { |req| req.uri =~ /api.stripe.com/ }) do |request|
VCR.use_cassette(request.uri, &request)
end
end
关于ruby - 根据要求使用特定的 VCR 磁带,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16533980/
我正在尝试模拟上传文件的 api 调用,我正在使用 Wistia Upload API因为我不想每次测试都打到服务器,所以我第一次尝试 VCR。 我的 spec/controllers 文件夹中有以下
我如何告诉 VCR 我希望它完全忽略一个规范文件? 我读过 post on Google Groups这表明要么允许真正的 HTTP 请求,要么明确关闭 VCR。 在我看来更有用的是 VCR 不会插手
我在录像机中自动重新录制磁带时遇到问题 这是我的配置: VCR.configure do |c| c.cassette_library_dir = 'spec/support/vcr_casset
嗨,我正在尝试使用带有标签的 vcr 用 cucumber 测试谷歌身份验证。 一切顺利,直到 token 过期。我想当它到期时会发生这种情况 但我有一个包含此内容的文件 http_interacti
我正在使用 VCR gem,我已经弄清楚了如何以 JSON 格式将 API 请求记录到磁带中。现在我如何访问来自该盒的响应正文中的信息? 最佳答案 您可以使用以下代码访问 raw_cassette_b
情况:使用 Rspec、FactoryGirl 和 VCR 测试 Rails 应用程序。 每次创建用户时,都会通过 Stripe 的 API 创建关联的 Stripe 客户。测试时,添加 VCR.us
我正在使用 VCR gem 来记录 http 交互并在将来重播它们。我想在 uri 请求中过滤掉我的实际密码值。以下是 uri 的示例: http://services.somesite.com/Se
我有一个网站可以保存用户提交的链接。 create 操作接受一个 url,并从 html 中的 og:tags 中提取数据。该应用程序本身运行良好,但我在使用 VCR 的 RSpec 中对其进行测试时
我收藏了大约 2.5GB 的 VCR 磁带 https://github.com/vcr/vcr .我正在使用 3.0.1 版。 我需要不时重新录制磁带。但是,由于运行测试比仅仅触发请求并将答案记录在
我的规范将通过主分支。如果我创建一个新分支并修改一些与订阅完全无关的代码,他们将因此失败。我能让他们通过的唯一方法是将我的 vcr.rb 更改为 :record => :new_episodes .
我需要 VCR 跳过 https://api.github.com/users/lapaty/starred调用真正的外部 API,同时继续模拟类似于 https://api.github.com/r
创建了一个录像机控制系统,可以检查日志并显示每个日志时系统的状态。它几乎工作得很好。 我刚买了一些录像机图形、开始、快进、后退等 我知道有一种简单的方法来添加它们,但是当我这样做时,它们的效果不如我的
我正在开发用于构建 API 包装器的 DSL,名为 Hendrix .我在测试 DSL 时遇到问题。由于它是 API 包装器,因此需要与外部服务进行交互。我不确定如何在测试方面处理这个问题。我正在使用
我有一个带有健身房协会的用户模型。健身房通过地理编码器 gem 使用 google api 进行地理编码,这是在 after_save 完成的。在我的健身房规范中,我能够添加 use_vcr_cass
我为一个 HTTP REST API 开发了一个 ruby 包装器,使用 rspec 和 vcr 来测试我的请求。项目加载到 travis-ci.org,它始终自动运行测试。我的测试有问题。 VC
我正在使用 VCR gem 来模拟 HTTP 查询。我已经录制了磁带,但后来我不得不改变一些东西,现在我遇到了一个错误: An HTTP request has been made that VCR
我正在使用 rspec/capybara/VCR 来录制磁带。目前我的磁带被自动命名为包括正在运行的测试层次结构的简化版本,这是默认设置。 我想配置磁带命名方案,使其依赖于请求的参数,因此任何带有 X
我设置了 VCR,它可以在我编写的多个测试中运行,没有问题。我尝试编写的最新测试将在第一次运行时通过,但之后将一直失败,除非我删除磁带。测试代码为: it "doesn't blow up if a
我不能用 vcr 录制任何东西,我有这样的设置: spec_helper.rb require 'vcr' VCR.configure do |c| c.cassette_library_dir
我正在从事的一个项目有集成测试,这些测试实际上出去并通过网络连接到 3rd 方 api...运行这些测试需要很长时间。我建议我们实现类似 VCR 的东西,以便测试交互的数据可以作为夹具捕获,并提高这些
我是一名优秀的程序员,十分优秀!