3

プロジェクトでは、提供された宝石を使用してinstagramにアクセスしています。サービスへの呼び出しを必要としない/モックして意味を保つテストをどのように作成しますか? (私は rspec を使用していますが、これは問題ではありません)

シナリオ: 私はいくつかのタグを購読しています。Instagram から新しいエンティティに関する投稿を受信したら、タグをクエリし、提供されたメディア ID を取得し、ID をクエリして結果をインポートします。(少し複雑ですが、これはどのように行われるようです)

いくつかの実際のコード例もありがたいです…</p>

4

1 に答える 1

0

これは、私が最近取り組んだプロジェクトで、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 がうまく機能しました。

于 2015-04-08T07:23:59.790 に答える