首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在第二次尝试运行测试时,VCR抛出无法处理请求(第一次尝试通过)

在第二次尝试运行测试时,VCR抛出无法处理请求(第一次尝试通过)
EN

Stack Overflow用户
提问于 2014-09-12 00:59:22
回答 1查看 9.3K关注 0票数 7

我设置了VCR,它运行在我编写的几个测试上,没有问题。我尝试编写的最新测试将在第一次运行时通过,但在此之后将继续失败,除非我删除盒式磁带。测试的代码是:

代码语言:javascript
复制
it "doesn't blow up if a user doesn't have billing info" do
    VCR.use_cassette('tax_reconciler/no_method_error')do
      user_guid = rand(10000000)
      CreateRecurlyTestData.create_account(user_guid, nil, nil)
      tax_reconciler = TaxReconciler.new
      new_tax_amount = rand(100000)
      user = create_test_user(:guid => user_guid)
      expect(tax_reconciler.update_tax_amount(user, new_tax_amount)).to_not raise_error
    end
  end

错误消息如下:

失败/错误: CreateRecurlyTestData.create_account(user_guid,0,0)VCR::Error::UnhandledHTTPRequestError:

代码语言:javascript
复制
   ================================================================================
   An HTTP request has been made that VCR does not know how to handle:
     GET https://2b64d08ef45c446dbba75720a37b7d41:@api.recurly.com/v2/accounts/3276643

   VCR is currently using the following cassette:
     - /Users/Evan/dish/stallone/fixtures/vcr_cassettes/tax_reconciler/no_method_error.yml
     - :record => :once
     - :match_requests_on => [:method, :uri]

   Under the current configuration VCR can not find a suitable HTTP interaction
   to replay and is prevented from recording new requests. There are a few ways
   you can deal with this:

     * If you're surprised VCR is raising this error
       and want insight about how VCR attempted to handle the request,
       you can use the debug_logger configuration option to log more details [1].
     * You can use the :new_episodes record mode to allow VCR to
       record this new request to the existing cassette [2].
     * If you want VCR to ignore this request (and others like it), you can
       set an `ignore_request` callback [3].
     * The current record mode (:once) does not allow new requests to be recorded
       to a previously recorded cassette. You can delete the cassette file and re-run
       your tests to allow the cassette to be recorded with this request [4].
     * The cassette contains 4 HTTP interactions that have not been
       played back. If your request is non-deterministic, you may need to
       change your :match_requests_on cassette option to be more lenient
       or use a custom request matcher to allow it to match [5].

   [1] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/configuration/debug-logging
   [2] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/record-modes/new-episodes
   [3] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/configuration/ignore-request
   [4] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/record-modes/once
   [5] https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/request-matching

规范助手中唯一的配置选项是:

代码语言:javascript
复制
VCR.configure do |c|
    c.cassette_library_dir = 'fixtures/vcr_cassettes'
    c.hook_into :webmock # or :fakeweb
  end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-13 16:55:20

您的录像机设置配置为记录模式:oncehttps://www.relishapp.com/vcr/vcr/v/1-8-0/docs/record-modes/once

简而言之,它只在没有盒式磁带的情况下记录请求。对于后续运行,它将只读取记录的请求,因此不匹配任何记录请求的请求将引发此错误。

这种模式出错的一个常见方法是,如果您删除您的盒式磁带和唯一运行的一个规范,而不是整个套件。宾果-你的磁带是创建的,所有的请求,除了在该特定的规格将不被识别。

这种模式的优点是,您可以捕获虚假请求--如果您知道您的磁带包含所有有效请求,则可以使用此模式捕获错误请求所导致的错误。

如果你想更灵活,你可以使用录音模式new_episodes。在这种模式下,识别的请求将从盒式磁带中重放,未重新录制的请求将被执行和记录。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25799165

复制
相关文章

相似问题

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