2012-05-01 14 views
9

Uso ElasticSearch en la página de inicio de mi sitio. En mis pruebas de aceptación, cuando un usuario inicia sesión, se le redirige a la página de inicio.ElasticSearch + Tire: buena estrategia para burlar ES

Pero usar ES en una prueba es costoso (necesita crear y eliminar el índice), por lo que no quiero tener que hacer eso cada vez que un usuario pasa por la página de inicio.

me gustaría hacer la búsqueda real ES sólo cuando la prueba tiene algunos metadatos:

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 

Así que tendría que "mock" la búsqueda y no utiliza ES cuando la prueba no hace tienen el: metadata elástica

¿Cuál sería una buena manera de lograr eso?

Respuesta

12

Probablemente usaría FakeWeb para habilitar y deshabilitar selectivamente las llamadas HTTP en vivo.

Para burlarse de llamadas a ES:

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

para permitir llamadas a ES:

FakeWeb.clean_registry 
FakeWeb.allow_net_connect = true 

permitir y no permitir conexiones de red no es estrictamente necesario aquí, ya que se burla de FakeWeb tienen prioridad sobre las llamadas reales , pero me parece que ayuda arrojar una excepción en tus pruebas cuando algo hace una llamada HTTP no bloqueada.

Probablemente pueda ampliar esto para usar los metadatos de prueba para habilitar o deshabilitar los simulacros según sea necesario.

+0

Gracias, lo intentaré :) – Robin

Cuestiones relacionadas