2013-03-08 78 views
0

我想知道是否有可能停用外部服務。 我有以下調用外部服務在我的應用程序:Rails可接受測試 - 剔除外部服務調用

bitly = Bitly.new("someuser", "123key") 
bitly.shorten("www.example.com/my_model/#{@my_model.id}") 

有沒有可能到Bitly存根出了在我的驗收測試每次調用這個服務?

任何例子,將不勝感激。

回答

2

我建議查看Webmock,https://github.com/bblimke/webmock。我喜歡的一件事是,它會爲任何未被存根的出站http請求引發錯誤(並提供生成的示例代碼來存根請求)。這也是有據可查的。

編輯:或者,而不是按捻出實際的HTTP請求,你能踩滅的縮短方法:

bitly = Bitly.new("someuser", "123key") 
bitly.stub(:shorten).and_return("some value") 
bitly.shorten("<some url>").should == "some value" 
0

您可以隨時重新定義類,並創建一個接受URL的新方法shorten。您還需要返回一個值,有意義的代碼:

class Bitly 

    def initialize(p1, p2) 
    @p1, @p2 = p1, p2 # in case it's important to remember them 
    end 

    def shorten(url) 
    "some return value" 
    end 

end 

bitly = Bitly.new("someuser", "123key") 
bitly.shorten("www.example.com/my_model/#{@my_model.id}") 

即使你包括此前聲明中的正常文件Bitly,下面將使用重新定義的類和方法的任何代碼。

可能有很多其他的更好的方法來做到這一點,但這很快(而且很髒)並且工作起來很簡單。

有時,您可以識別出一個特定的方法,該方法會阻塞所有外部服務的I/O,將其替換,並利用代碼所提供的所有其他功能。這是我認爲對Ruby很酷的事情之一。