Me gustaría probar que un método se llama recursivamente con un argumento específico.Rspec: cómo probar la recursión?
Mi enfoque:
class Recursable
def rec(arg)
rec(7) unless arg == 7
end
end
describe Recursable do
it "should recurse" do
r = Recursable.new('test')
r.should_receive(:rec).with(0).ordered
r.should_receive(:rec).with(7).ordered
r.rec(0)
end
end
Inesperadamente, RSpec falla con:
expected :rec with (7) once, but received it 0 times
Alguna idea de lo que está mal con mi enfoque? ¿Cómo probar la recursión efectiva con un argumento específico?
Ah, está bien. ¡Oh bien! Estoy tratando de encontrar un error: el método devuelve un valor incorrecto (es más complicado que el que se muestra aquí). Pensé que podría probar cada parte para reducir el espacio problemático. Se vuelve más complicado con cada nivel de recursión y hubiera sido bueno probar si la recursión se ejecuta correctamente. – crispy
En otras palabras: no pruebe la implementación, pruebe el efecto que tiene el código. ¡Gran respuesta! – awendt