Тестовый ответ фонового задания Rails 3 (API-Request) с VCR в функции Cucumber

У меня есть фоновое задание Rails 3 (delayed_job), которое отправляет сообщение hipchat/Campfire в их API, и я хочу проверить ответ в своей функции Cucumber. Есть ли способ получить последние 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

Видеомагнитофон уже записывает запрос и ответ, но я не знаю, как их принять. Я думаю о чем-то похожем на перехват электронных писем, отправленных с шагами Пикла. Кто-нибудь знает, как это сделать?

Я использую рельсы 3.2.8, огуречные рельсы 1.3 и vcr 2.2.4 (с веб-макетом).

С уважением Торстен Полезно Бесполезно


person tbuehl    schedule 05.09.2012    source источник


Ответы (1)


Вы можете использовать VCR.current_cassette, чтобы получить текущую кассету, а затем запросить ее, чтобы получить объект [VCR::HTTPInteraction][1], который вы ищете, но это будет немного сложно - кассета видеомагнитофона хранит вновь записанные 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 ознакомьтесь с наслаждайтесь документами.

person Myron Marston    schedule 07.09.2012
comment
Спасибо! Это была информация, которую я искал, работает нормально. Я предпочитаю нормальную документацию, а не документацию по вкусу - я думаю, что в большинстве случаев они больше сбивают с толку, чем помогают. - person tbuehl; 08.09.2012
comment
Это хорошие отзывы о документах Relish, хотя 99% отзывов о них были исключительно положительными. Если вам нужны нормальные документы в хуке after_http_request, проверьте http://rubydoc.info/gems/vcr/VCR/Configuration:after_http_request - person Myron Marston; 08.09.2012
comment
С обычными документами я подумал о Github readme и вики-страницах. На мой взгляд, смачный сценарный стиль подходит только для небольшого круга примеров, для остальных он кажется неправильным и усложняет его. Но интересно знать, что большинству они нравятся. - person tbuehl; 11.09.2012