我在模型中有一个与外部视频编码服务(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#详细信息方法调用Zencoder Web服务以查明视频编码是否完整。
问题是如何劫持Zencoder :: Job#详细信息方法,所以当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。 我读了一些关于模拟和存根的内容,但我不确定在这种情况下是否可以使用它们。
非常感谢您的帮助。
答案 0 :(得分:1)
Zencoder::Job.stub_chain(:details, :success).and_return(true)