2011-05-27 36 views
2

我在與外部視頻編碼服務(Zencoder)交互的模型中有一種方法。它使用zencoder_rb gem。 https://github.com/zencoder/zencoder-rb我該如何使用RSpec來測試我的模型與外部服務的交互

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 ::招聘#細節方法使該Zencoder調用Web服務,以找出是否視頻編碼完成。

問題是我該如何劫持Zencoder :: Job#details方法,所以當它被check_encoding_status調用時,它會返回一個我可以製作的對象。計劃是讓這個對象響應#成功?以任何方式對我的測試都有意義。

因此,這裏是我想如何規範

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
Zencoder::Job.stub_chain(:details, :success).and_return(true) 
+0

謝謝!存根和stub_chain的工作就像一個魅力! – momo 2011-05-30 20:10:53

相關問題