2011-10-26 14 views
28

Tengo las siguientes especificaciones:Cómo poner a prueba el código de respuesta con Carpincho + Selenio

it "deletes post", :js => true do 
... 
... 
page.status_code.should = '404' 

end 

La línea page.status_code me está dando este error:

Capybara::NotSupportedByDriverError 

¿Cómo puedo comprobar el código de estado de la página ?

+0

relacionados: https://groups.google.com/forum/?fromgroups=#!topic/ruby-capybara/KdMvhjcjm8E – tokland

Respuesta

15

status_code no es compatible actualmente con el controlador Selenium. Tendrá que escribir una prueba diferente para verificar el código de estado de la respuesta.

3

Cambie a otro controlador (como rack-test) para esa prueba, o pruebe que la página mostrada es la página 404 (debe tener el contenido 'No encontrado' en h1).

Como dijo @eugen, Selenium no es compatible con los códigos de estado.

40

Como un aparte. Esta línea

page.status_code.should = '404' 

Debe ser

page.status_code.should == 404 

Esto funcionó para mí con capibara-webkit.

+0

otro usuario capibara-webkit es aquí, pero 'esperar (page.status_code) .to be (200) 'returns' Capybara :: NotSupportedByDriverError'. ¿Tienes alguna idea de por qué? – scaryguy

2

El controlador web de Selenium no implementa el código de estado y no hay forma directa de probar el código de respuesta con selenio (opción del desarrollador).

Para probar que he añadido en mi diseño/application.html.erb:

<html code="<%= response.try(:code) if defined?(response) %>">[...]</html> 

Y luego, en mi prueba:

def no_error? 
    response_code = page.first('html')[:code] 
    assert (response_code == '200'), "Response code should be 200 : got #{response_code}" 
end 
3

¡Pruébalo

expect(page).to have_http_status(200) 
+5

Hola Ajay; su código podría ser correcto, pero con algún contexto sería una mejor respuesta; por ejemplo, podría explicar cómo y por qué este cambio propuesto resolvería el problema del que pregunta, quizás incluyendo un enlace a la documentación relevante. Eso lo haría más útil para ellos, y también más útil para otros lectores de sitios que buscan soluciones a problemas similares. –

1

Uso js para hacer una solicitud y obtener el estado como a continuación:

js_script = <<JSS 
xhr = new XMLHttpRequest(); 
xhr.open('GET', '#{src}', true); 
xhr.send(); 
JSS 
actual.execute_script(js_script) 
status = actual.evaluate_script('xhr.status') # get js variable value 

Comprobar https://gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db para más detalles

Cuestiones relacionadas