我想知道是否有可能停用外部服務。 我有以下調用外部服務在我的應用程序:Rails可接受測試 - 剔除外部服務調用
bitly = Bitly.new("someuser", "123key")
bitly.shorten("www.example.com/my_model/#{@my_model.id}")
有沒有可能到Bitly存根出了在我的驗收測試每次調用這個服務?
任何例子,將不勝感激。
我想知道是否有可能停用外部服務。 我有以下調用外部服務在我的應用程序:Rails可接受測試 - 剔除外部服務調用
bitly = Bitly.new("someuser", "123key")
bitly.shorten("www.example.com/my_model/#{@my_model.id}")
有沒有可能到Bitly存根出了在我的驗收測試每次調用這個服務?
任何例子,將不勝感激。
我建議查看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"
您可以隨時重新定義類,並創建一個接受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很酷的事情之一。