0

我想知道是否可以剔除外部服务。我在我的应用程序中有以下对外部服务的调用:

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

在我的验收测试期间,是否有可能在每次调用此服务时将 Bitly 排除在外?

任何示例将不胜感激。

4

2 回答 2

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"
于 2013-03-08T05:47:46.553 回答
0

您始终可以重新定义该类,并创建一个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 很酷的事情之一。

于 2013-03-08T05:18:46.167 回答