これは、私が最近取り組んだプロジェクトで、Etsy への同様の呼び出しをスタブ化した方法です。
module EtsyStubs
def stub_etsy_find_listing(options = {})
if options[:fail]
Etsy::Listing.stub(:find).and_return(nil)
return
end
etsy_item = OpenStruct.new(
state: options[:state],
price: options[:price],
result: {
"currency_code" => "USD",
"Variations" => []
}
)
Etsy::Listing.stub(:find).and_return(etsy_item)
end
end
これは、spec/support ディレクトリのファイルに存在し、spec_helper.rb のように含める必要がありますconfig.include(EtsyStubs)
。
次のようにして、spec_hlper.rb のすべてのスペックに含めることができます。
config.before(:each) do
stub_etsy_find_listing
end
または、個々のテストの前に含めることができます。
重要なのは、適切な呼び出しに応答して返すオブジェクトを選択することです。私の場合、etsy_item.price、etsy_item.state などに応答する単純な OpenStruct がうまく機能しました。