9

私は自分のサイトのホームページでElasticSearchを使用しています。私の受け入れテストでは、ユーザーがログインすると、ホームページにリダイレクトされます。

ただし、テストで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

したがって、テストに:elasticメタデータがない場合は、検索を「モック」し、ESを使用しないようにする必要があります。

それを達成するための良い方法は何でしょうか?

4

1 に答える 1

12

私はおそらくFakeWebを使用して、ライブHTTP呼び出しを選択的に有効または無効にします。

ESへの通話をモックするには:

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

ESへの通話を許可するには:

FakeWeb.clean_registry
FakeWeb.allow_net_connect = true

FakeWebのモックは実際の呼び出しよりも優先されるため、ここではネット接続を許可および禁止する必要はありませんが、モックされていないHTTP呼び出しを行う場合は、テストで例外をスローするのに役立ちます。

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

于 2012-05-02T04:06:01.023 に答える