2013-04-24 49 views
0

我有一個CommentList類與靜態方法fetch。問題是,它不是一個ActiveRecord模型,但它使http調用來獲取數據。我該如何模擬非DB模型,並讓它返回給定的列表

class CommentList 
    def self.fetch 
    # http-foo here 
    return ['some', 'data'] 
    end 
end 

現在我想的其他模型使用此方法提取和模擬走CommentList#fetch方法在我的規格返回給定數據集。

我只能找到與數據庫一起玩的嘲笑寶石。

我完全可以忽略一些東西嗎?

回答

1

如果您使用RSpec的,它應該很容易做到這一點是這樣的:

CommentList.stub(:fetch => ['some', 'data']) 

或使之更加的期待:

CommentList.should_receive(:fetch).and_return(['some', 'data']) 

另一種更復雜的解決辦法是設置VCR。基本上它在這種情況下所做的是第一次運行測試,CommentList將確實會觸發外部http服務並獲取數據。 VCR然後保存該響應,並從此開始,它返回緩存的響應。

好的是,如果您想重新測試外部API調用(也許它們的API已更改?),那麼您只需刪除VCR保存的數據,運行測試,然後您的測試將再次針對外部服務運行,緩存新鮮數據。

+0

真棒,#stub方法正是我所搜索的。不知道爲什麼我沒有找到它。錄像機的想法聽起來很有趣。將查找它 – SkaveRat 2013-04-24 18:08:36

相關問題