2012-05-01 21 views
9

Io uso ElasticSearch sulla home page del mio sito. Nei miei test di accettazione, quando un utente effettua il login, viene reindirizzato alla homepage.ElasticSearch + Tire: buona strategia per deridere ES

Tuttavia, l'utilizzo di ES in un test è costoso (è necessario creare ed eliminare l'indice), quindi non voglio doverlo fare ogni volta che un utente passa attraverso la home page.

Mi piacerebbe fare la ricerca vera e ES solo quando il test ha alcuni metadati:

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 

Quindi avrei bisogno di "finta" la ricerca e non utilizzare ES quando il test non fa hanno la: metadati elastici.

Quale sarebbe un buon modo per raggiungerlo?

risposta

12

Probabilmente userò FakeWeb per abilitare e disabilitare selettivamente le chiamate HTTP in tempo reale.

per deridere le chiamate a ES:

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

per consentire le chiamate a ES:

FakeWeb.clean_registry 
FakeWeb.allow_net_connect = true 

Permettere e non consentire connessioni di rete non è strettamente necessario qui, dal momento che prende in giro di FakeWeb hanno la priorità rispetto alle chiamate reali , ma trovo che sia utile lanciare un'eccezione nei test quando qualcosa effettua una chiamata HTTP non bloccata.

Probabilmente si può espandere su questo per utilizzare i metadati di test per abilitare o disabilitare i mock come necessario.

+0

Grazie, ci proverò :) – Robin

Problemi correlati