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をチェックすることをお勧めします。私が気に入っている点の1つは、スタブ化されていないアウトバウンドhttpリクエストに対してエラーが発生することです(また、リクエストをスタブ化するために生成されたサンプルコードも提供します)。また、十分に文書化されています。

編集:あるいは、実際のhttpリクエストをスタブアウトする代わりに、shortメソッドをスタブアウトすることもできます。

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 の素晴らしいところの 1 つです。

于 2013-03-08T05:18:46.167 に答える