2012-08-03 21 views
7

¿Hay alguna manera de forzar la falla de un escenario de pepino?cómo forzar a un escenario de pepino a fallar?

Necesito verificar algunos escenarios fallidos al final de cada una de mis pruebas. Así que pensé que podría hacer la comprobación de un diálogo de "error" y luego pasar la prueba si ocurría.

Esto es posible con el siguiente código pero hay un problema. ¡Una vez que eleve la excepción en el fracaso! función, luego pepino deja de ejecutar el resto del gancho Después, por lo que la función de cierre de sesión no se llama.

fue:

After() do |scenario| 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    fail!(raise(ArgumentError.new('Unexpected Error dialog!'))) 
    end 
    logout 
end 

Ahora:

After() do |scenario| 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    scenario.fail!(logout) 
    end 
end 

¿Hay una mejor manera de fracasar una prueba de pepino sin elevar una excepción?

Respuesta

8

que pueda obtener el gancho después de fallar el uso de sus afirmaciones normales. no han hecho mucho con excepciones Carpincho/rspec, pero creo que puede hacer:!

page.should have_selector?(:dialog_message, 1, :text => 'Error') 

Sin embargo, si usted hace esto o lo hace el scenario.fail(), todavía no cerrar la sesión. Debe envolverlo en un bloque de comenzar y asegurar.

Prueba esto:

After do |scenario| 
    begin 
     page.should have_selector?(:dialog_message, 1, :text => 'Error') 
    ensure 
     logout 
    end 
end 

actualización

Si no desea llamar las afirmaciones estándar y directamente fallar el escenario, puede hacer lo siguiente - es necesario utilizar fail en lugar de fail!:

After() do |scenario| 
    begin 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
     fail(ArgumentError.new('Unexpected Error dialog!')) 
     #Or you can just do fail('Unexpected Error dialog') if you do not care about the type. 
    end 
    ensure 
    logout 
    end 
end 
+0

Gracias Justin, nunca pensé en usar el bloqueo de seguridad.Esperaba que hubiera una forma de hacer que el escenario fallara sin hacer una excepción. – snowstreams

3

Solo una respuesta preliminar, ya que no he podido verificarlo, pero supongo que llamar al Raise siempre tiene la garantía de detener la ejecución (a menos que se haga dentro de un proc o lambda, por lo que su evaluación se aplaza) .

simplemente tratar

if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    scenario.fail!(StandardError.new('Unexpected Error Dialog!')) 
end 
logout 
+0

lo sentimos, trate 'scenario.fail ('mensaje')' Gracias –

+0

, que tri ed que allí también. que tiene el error: método no definido 'mensaje' de "mensaje": String (NoMethodError) Así que he intentado esto: scenario.fail (cierre de sesión) Este medio trabajó. Al menos ejecutó mi código de cierre de sesión y falló la prueba, pero todavía dio un mensaje de error: método indefinido 'mensaje 'para nil: NilClass (NoMethodError) – snowstreams

+0

Estoy un poco confundido de dónde podría provenir - ¿podría actualizar la pregunta con el código actual que está causando ese error? –

Cuestiones relacionadas