2012-05-01 118 views
9

我在我的網站的主頁上使用ElasticSearch。在我的驗收測試中,當用戶登錄時,他被重定向到主頁。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 

所以我需要在測試確實不具有「模擬」的搜索,而不是使用ES:彈性元數據。

什麼是實現該目標的好方法?

回答

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的嘲笑過真正的電話獲得優先權,但是我發現當某些東西產生unmocked的HTTP調用時,它有助於在測試中拋出一個異常。

您可以在此擴展以使用測試元數據來根據需要啓用或禁用模擬。

+0

謝謝,我會試試:) – Robin