Escenarioque afirme que una excepción en particular se lanza en Pepino
estoy escribiendo una biblioteca (sin Ruby on Rails) para los que me gustaría tener características muy detalladas de pepino. Esto incluye especialmente la descripción de errores/excepciones que deberían arrojarse en varios casos.
Ejemplo
La forma más intuitiva para escribir los pasos de pepino, probablemente sería algo así como
When I do something unwanted
Then an "ArgumentError" should be thrown
Problema
Hay dos cuestiones que tengo que abordar:
- El primer paso no debe fallar cuando se lanza una excepción.
- La excepción de que el primer paso arroja debe ser accesible al segundo paso para poder hacer algo de aserción mágica.
Unelegant y engorroso Solución
El mejor método que he sido capaz de llegar a almacenar en caché es la excepción en el primer paso y ponerlo en una variable de instancia que la segunda etapa se puede acceder, de este modo:
When /^I do something unwanted$/ do
begin
throw_an_exception!
rescue => @error
end
end
Then /^an "(.*)" should be thrown$/ do |error|
@error.class.to_s.should == error
end
sin embargo, esto hace que el primer paso más o menos inútil en los casos en que no quiere que falte, y se requiere una variable de instancia, que nunca es una buena cosa.
Entonces, ¿alguien puede ayudarme con una solución al menos menos engorrosa? ¿O debería escribir mis características de manera diferente de todos modos? Cualquier ayuda sería muy apreciada.
¡Ahora esa pregunta está muy bien escrita! Merece una buena respuesta con seguridad (lo siento, no pude encontrar una) :) – user562529
Muchas gracias @ user562529. Lamentablemente, tengo la sensación de que en realidad no hay una solución fácil para este problema, por lo que podría abrir un problema de Pepino y esperar que implementen algo práctico. – JLimperg