Bueno, podría ampliar Test::Unit::Assertions
para hacer lo que quiera, no creo que haya una forma integrada de hacerlo. Tal vez algo como esto (rápida & sucio):
require 'test/unit'
module Test::Unit::Assertions
def safe_assert(test, msg=nil)
passed = msg.nil? ? assert(test) : assert(test,msg)
ensure
puts 'take screenshot' unless passed
end
end
class MyTest < Test::Unit::TestCase
def setup
puts 'setup'
end
def teardown
puts 'teardown'
end
def test_something
safe_assert true
puts 'before failing assert'
safe_assert false, "message"
puts 'after failing assert'
end
end
de salida:
Loaded suite unittest
Started
setup
before failing assert
take screenshot
teardown
F
Finished in 0.001094 seconds.
1) Failure:
test_something(MyTest) [unittest.rb:5]:
message
1 tests, 2 assertions, 1 failures, 0 errors, 0 skips
Test run options: --seed 58428
EDIT: en realidad se podría pasar los argumentos a assert
de una manera más simple:
module Test::Unit::Assertions
def safe_assert(*args)
passed = assert(*args)
ensure
puts 'take screenshot' unless passed
end
end
también, podría envolver un estándar assert
en un bloque begin
- ensure
- end
si solo necesita esta funcionalidad con poca frecuencia:
class MyTest < Test::Unit::TestCase
def test_something
safe_assert true
puts 'before failing assert'
begin
passed = assert false, "message"
ensure
puts 'take screenshot' unless passed
end
puts 'after failing assert'
end
end
o se construye un método que asegura una captura de pantalla como en el siguiente ejemplo. En realidad, esto parece ser la forma más limpia de mí:
def screenshot_on_fail
passed = yield
ensure
puts 'take screenshot' unless passed
end
class MyTest < Test::Unit::TestCase
def test_something_else
screenshot_on_fail do
assert true
end
screenshot_on_fail do
assert false, 'message'
end
end
end
Esto parece una buena manera de hacerlo, ¡gracias! –
¡De nada! no te olvides de aceptar la respuesta si resolvió tu problema :) –
echa un vistazo a mi edición, de hecho hay una forma mucho más limpia de esto que me vino a la mente en este momento ':)' –