【问题标题】:How can I use RSpec to test my model's interaction with external services如何使用 RSpec 测试我的模型与外部服务的交互
【发布时间】:2011-05-27 20:58:05
【问题描述】:

我在模型中有一个与外部视频编码服务 (Zencoder) 交互的方法。它使用 zencoder_rb gem。 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 Web 服务来确定视频编码是否完成。

问题是我如何劫持 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。 我读了一些关于模拟和存根的文章,但我不确定在这种情况下是否可以使用它们。

非常感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails-3 unit-testing mocking rspec


    【解决方案1】:
    Zencoder::Job.stub_chain(:details, :success).and_return(true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      相关资源
      最近更新 更多