2012-05-01 8 views
9

Używam ElasticSearch na stronie głównej mojej witryny. W moich testach akceptacyjnych, kiedy użytkownik się loguje, zostaje przekierowany na stronę główną.ElasticSearch + Tire: dobra strategia na kpiny ES

Ale używanie ES w teście jest kosztowne (trzeba utworzyć i usunąć indeks), więc nie chcę tego robić za każdym razem, gdy użytkownik przechodzi przez stronę główną.

Chciałbym zrobić rzeczywiste przeszukiwanie ES tylko wtedy, gdy badanie ma pewne metadane:

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 

Więc chciałbym potrzeba do „mock” poszukiwanie i nie używać ES gdy badanie robi nie mają: elastyczne metadane.

Jaki byłby dobry sposób, aby to osiągnąć?

Odpowiedz

12

Prawdopodobnie użyłbym FakeWeb do selektywnego włączania i wyłączania połączeń HTTP na żywo.

mock połączenia do ES:

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

pozwala na wykonywanie połączeń do ES:

FakeWeb.clean_registry 
FakeWeb.allow_net_connect = true 

Umożliwienie i uniemożliwienie połączenia netto nie jest bezwzględnie konieczne tutaj, ponieważ mocks FakeWeb za uzyskać pierwszeństwo w stosunku do rzeczywistych połączeń , ale uważam, że pomaga rzucić wyjątek w testach, gdy coś robi niezatwierdzone połączenie HTTP.

Prawdopodobnie możesz rozwinąć tę opcję, aby użyć metadanych testu, aby włączyć lub wyłączyć makiety w razie potrzeby.

+0

Dzięki, spróbuję :) – Robin