Как я могу использовать RSpec для проверки взаимодействия моей модели с внешними сервисами - PullRequest
2 голосов
/ 28 мая 2011

У меня есть метод в модели, который взаимодействует с внешней службой кодирования видео (Zencoder).Он использует гем zencoder_rb.https://github.com/zencoder/zencoder-rb

class EncodingRequest
  def check_encoding_status
    response = Zencoder::Job.details(self.request_id)
    if response.success?
      # do something
    else
      # do something else
    end
  end
end

Метод Zencoder :: Job # details вызывает веб-сервис Zencoder, чтобы узнать, завершено ли кодирование видео.

ВопросКак я могу захватить метод Zencoder :: Job # details, чтобы при вызове check_encoding_status он возвращал объект, который я могу создать.План состоит в том, чтобы заставить этот объект реагировать на #success?в любом случае, имеет смысл для моего теста.

Итак, вот как я бы хотел, чтобы спецификация выглядела

it "should mark the encoding as failed if there was an error in Zencoder" do
  dummy_response = Zencoder::Response.new(:body => {:state => "finished"}, :code => 200)
  # code that will force Zencoder::Job#details to return this dummy_response

  @encoding = EncodingRequest.new(:source_asset => @final_large, :target_asset => @final_small)
  @encoding.check_encoding_status
  @encoding.status.should eql "success"
end

В настоящее время я использую rspec 2.5.Я немного читал о насмешках и заглушках, но я не уверен, что их можно использовать в этом сценарии.

Ваша помощь очень ценится.

1 Ответ

1 голос
/ 28 мая 2011
Zencoder::Job.stub_chain(:details, :success).and_return(true)
...