Este artículo presenta una técnica de mocking basada en la captura de efectos, aplicable a cualquier tipo de computación con efectos. El autor parte de un artículo previo donde mostraba cómo abstraer código síncrono, asíncrono y propenso a errores mediante continuaciones, una abstracción capaz de representar cualquier computación monádica. A partir de ahí, defuncionaliza las continuaciones en un único tipo de datos que facilita las pruebas.
El artículo introduce un tipo Effect con dos variantes: Fetch(key, resume), que captura la llamada al efecto junto con la función de reanudación, y Pure(value), que marca el final del cómputo. La implementación de fetch se limita a construir ese tipo sin invocar la continuación, y un runner entrega la estructura al test. De ese modo, los tests pueden asertar sobre el orden exacto de las llamadas, los argumentos pasados y los valores de reanudación, sin necesidad de mocks específicos por test ni de stubs, librerías de mocking o frameworks de inyección de dependencias.
El enfoque funciona para cualquier efecto y permite añadir nuevos efectos simplemente añadiendo variantes al tipo Effect. Como contrapartida, obliga a usar continuaciones en todo el código con efectos, aunque el autor sigue manteniendo la lógica de negocio pura y los efectos en los bordes del sistema. Sobre el runtime de JavaScript, sustituir promesas por continuaciones resulta poco costoso y aporta una estrategia de testing uniforme. El artículo forma parte del proyecto EYG, un experimento del autor en lenguajes y herramientas.
