2012-05-01 12 views
9

私は自分のサイトのホームページでElasticSearchを使用しています。私の受け入れテストでは、ユーザーがログインすると、彼はホームページにリダイレクトされます。ElasticSearch + Tire:模擬するための良い戦略ES

しかし、テストでESを使うのは高価です(インデックスを作成して削除する必要があります)ので、ユーザーがホームページを通過するたびに行う必要はありません。

私はテストは、いくつかのメタデータを持っている場合にのみ、実際のESの検索を行うしたいと思います:

config.before(:each) do 
    if example.metadata[:elastic] 
     Model.create_elasticsearch_index 
    end 
end 

scenario "Results should be ordered by distance", :elastic do 
    # tests... 
end 

だから私はテストが全く持っていない場合にESを使用しない「モック」に検索を必要としません:を弾性メタデータ

これを達成するにはどうすればよいでしょうか?

答えて

12

FakeWebを使用して、ライブHTTPコールを選択的に有効または無効にすることができます。 ESへの呼び出しを許可するに

FakeWeb.allow_net_connect = false 
FakeWeb.register_uri(:any, %r|\Ahttp://localhost:9200|, :body => "{}") 

:ESへの呼び出しを模擬するために

FakeWebのモックが本当の呼び出しに優先し得るので、

FakeWeb.clean_registry 
FakeWeb.allow_net_connect = true 

ネット接続を許可し、許可しないが厳密に、ここで必要とされていませんしかし、私は何かがモックされていないHTTP呼び出しを行うときにあなたのテストで例外をスローするのに役立つことがわかります。

テストメタデータを使用して必要に応じてモックを有効または無効にすることができます。

+0

ありがとう、私はそれを試してみる:) – Robin

関連する問題