我想知道是否可以剔除外部服务。我在我的应用程序中有以下对外部服务的调用:
bitly = Bitly.new("someuser", "123key")
bitly.shorten("www.example.com/my_model/#{@my_model.id}")
在我的验收测试期间,是否有可能在每次调用此服务时将 Bitly 排除在外?
任何示例将不胜感激。
我想知道是否可以剔除外部服务。我在我的应用程序中有以下对外部服务的调用:
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"
您始终可以重新定义该类,并创建一个shorten
接受 URL 的新方法。您还需要返回一个对您的代码有意义的值:
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 很酷的事情之一。