2011-01-28 7 views
2

私はgarb gemを使用して、Googleアナリティクスのページビューのような基本的な統計情報を取得しています。すべて正常に動作していますが、私はAPIコールをテストする最良の方法を理解できません。 Googleアナリティクスクラスのペアバージョンがあります:Rspecでgoogle analytics(garb)APIをテストするには?

class Analytics 
    extend Garb::Model 

    metrics :pageviews 
    dimensions :page_path 

    Username = 'username' 
    Password = 'password' 
    WebPropertyId = 'XX-XXXXXXX-X' 

    # Start a session with google analytics. 
    # 
    Garb::Session.login(Username, Password) 

    # Find the correct web property. 
    # 
    Property = Garb::Management::Profile.all.detect {|p| p.web_property_id == WebPropertyId} 

    # Returns the nubmer of pageviews for a given page. 
    # 
    def self.pageviews(path) 
    Analytics.results(Property, :filters => {:page_path.eql => path}).first.pageviews.to_i 
    end 

    # ... a bunch of other methods to pull stats from google analytics ... 
end 

かなり簡単です。しかし、定数が確実に設定されていることを超えて、私は効果的なテストを書くことができませんでした。このようなことをテストする最良の方法は何ですか?ここにいくつかの問題があります:

  • 実際に私のテストでAPIをヒットしたくないです。それは遅く、インターネット接続が必要です。
  • 統計は明らかに常に変化するため、テスト時にAPIをヒットしても期待値を設定することは困難です。

モッククラスがほしいと思いますか?しかし、私は以前にそのパターンを使ったことはありません。どんな助けも素晴らしいでしょう、正しい道に私をつかめるためのいくつかのリンクさえあります。

+1

2つの固定期間に対してテストを試みることができます。古いGAのデータは変更されません。 – Yahel

答えて

1

Fakewebは、開始するのに適しています。接続が遅いとテストに影響しないように、SUTをネットワークから隔離することができます。

Garbについて詳しく知りません。他に何が言いたいのか分かりません。明らかに、APIから送受信されるデータの形式を知る必要があるため、適切なモック/スタブを作成できます。

+0

良いアドバイス。私はVCRをチェックすることをお勧めしますそれはこのタイプのもののために驚くべきことです:http://relishapp.com/myronmarston/vcr/v/1-10-0/docs/getting-started –

+0

また、この記事はNoel Rappinが役に立ちました:http ://pragprog.com/magazines/2011-03/testing-for-web-services –

0

Google APIへの実際の呼び出しを模倣するテストインターフェイスを作成することをお勧めします。他のオプションは、サンプルデータを作成するためにモックを使用することです。

これは何も得られないため、実際のAPIに当てはまらないことに同意します。 APIの所有者が応答形式を変更するため、実際のAPIへの呼び出しはある日成功して次の呼び出しに失敗する可能性があります。 GAではおそらくバージョン管理されたAPIは変更されないため、テスト環境で使用してテストを高速化できるインターフェースを作成することは安全だと思います。