2

我有一个 Rails 3 后台作业 (delayed_job),它向他们的 API 发送一条 hipchat / Campfire 消息,我想检查我的 Cucumber 功能中的响应。有没有办法获得 VCR 记录的最后一个 HTTP 响应?

该功能看起来像这样

    @vcr
    Scenario: Send hipchat message when task created
      Given an hipchat_sample integration exists with app: app "teamway"
      When I create an "ActionMailer::Error" task to "Teamway"
      And all jobs are worked off # invoke Delayed::Worker.new.work_off
      Then a hipchat message should be sent "ActionMailer::Error"

在我的步骤定义中,我想检查响应正文:

    Then /^a hipchat message should be sent "(.*?)"$/ do |arg1|
      # Like this:
      # VCR::Response.body.should == arg1
    end

VCR 已经记录了请求和响应,但我不知道如何获取它们。我想到了类似于捕获使用 Pickle 的步骤发送的电子邮件的方法。有谁知道如何做到这一点?

我使用 rails 3.2.8、cucumber-rails 1.3 和 vcr 2.2.4(带有 webmock)。

最好的问候托斯滕

4

1 回答 1

1

您可以使用VCR.current_cassette获取当前磁带,然后查询它以获取[VCR::HTTPInteraction][1]您正在寻找的对象,但这会有点复杂 - VCR 磁带将新记录的 HTTP 交互与其可用的交互分开存储回放和已经回放的那些......所以你需要一些复杂的条件来确保在你的测试录制和回放时一切正常。

相反,我建议您使用after_http_request钩子:

module HipmunkHelpers
  extend self
  attr_accessor :last_http_response
end

Before { HipmunkHelpers.last_http_response = nil }

VCR.configure do |c|
  c.after_http_request(lambda { |req| URI(req.uri).host == 'hipmunk.com' }) do |request, response|
    HipmunkHelpers.last_http_response = response
  end
end

然后,在您的黄瓜步骤中,您可以访问HipmunkHelpers.last_http_response.

有关after_http_request钩子的更多详细信息,请查看relish 文档

于 2012-09-07T15:08:22.387 回答