Muchas veces a la hora de programar un script que actualiza muchos datos (tipicamente una rake task), se suele obtener un resultado similar:
Un script largo, procedural, que funciona como una caja negra.
Y el problema es que, para testearlo bien, hay que correrlo muchas veces contra distintos conjuntos de datos, evaluando el estado final de la base de datos. Los tests suelen ser líneas y líneas de setup, pequeñas variaciones entre test y test (muchas veces cambios poco claros o evidentes) y finalmente una evaluación del estado final con una query con gusto a poco.