Entonces, abres tu computadora portátil y lo primero que haces es ir a la prueba, que esperemos que esté allí, y tratas de averiguar qué está fallando y cuál es la intención, cómo se supone que debe funcionar. Pero si tienes muchas afirmaciones inteligentes que calcular en tu cabeza, si tienes una configuración de prueba complicada, si tienes este resultado mutable del sistema, vas a tener un momento muy difícil depurando todo eso. Así que terminarás frustrado, cerrarás tu computadora portátil y te irás a la cama, y esta será una experiencia horrible que podrías haber evitado.
Y puedes evitarlo manteniendo tus pruebas planas. Aquí tienes un ejemplo para ti. Esta es una prueba típica, así que tenemos un bloque describe que envuelve toda la característica, prepara un entorno antes de todas las pruebas, luego tiene una subcaracterística, por ejemplo, y tiene su propia configuración, y finalmente, la prueba. Incluso en este ejemplo simple, nota cuántas cosas necesitamos tener en cuenta solo para entender lo que necesita esta única prueba. Entonces, ¿por qué no ponerlo directamente en la prueba y eliminar por completo los bloques describe? Y te entiendo, al principio puede ser bastante confuso y repetitivo, pero con el tiempo, llegarás a amarlo, porque los beneficios que esto brinda son increíbles. Es declarativo, es explícito y comprendes lo que cada prueba necesita de la prueba, al leer la prueba. Y luego, por supuesto, puedes crear y reutilizar utilidades de prueba para abstraer la lógica comúnmente utilizada. Por ejemplo, si en esta prueba completamos un formulario de inicio de sesión y hacemos esto muy a menudo para probar la función de inicio de sesión, bueno, ¿por qué no abstraerlo en una utilidad auxiliar y llamarlo iniciar sesión? Y nota cómo esto se lee mucho mejor de inmediato, se lee como la intención, queremos iniciar sesión con estas credenciales. No importa cuáles sean los selectores de formulario, cuáles son las ideas y las clases, no importa, la intención es iniciar sesión y luego hacer algunas expectativas.
Y, por supuesto, una de las características o enfoques más pasados por alto es que puedes dividir las pruebas, no tienes que meter todas las pruebas en un solo archivo de prueba. Entonces, si tienes una característica complicada como esta de inicio de sesión y tiene diferentes proveedores como correo electrónico y GitHub, bueno, ponlos en archivos de prueba separados y te dará una gran legibilidad y descubribilidad sin costo alguno. Y luego, cuando necesites agregar más lógica y más pruebas, simplemente agrega nuevos archivos de prueba y eso es todo. Lo mismo ocurre cuando se eliminan características, porque al igual que un buen código, una buena prueba es aquella que se puede eliminar fácilmente. Es la prueba que no introduce muchas dependencias implícitas y todo tipo de magia en la configuración, lo que hace que sea muy difícil de eliminar.
Entonces, para resumir, al abordar la complejidad en las pruebas, es muy importante utilizar adecuadamente las fases de prueba y realizar la mayor parte del trabajo pesado en la fase de configuración. Y luego, por supuesto, reducir la repetición en la fase de acción. Es realmente crucial expresar las intenciones utilizando funciones auxiliares como la función de inicio de sesión que acabo de mostrarte para ayudar a que tu prueba se lea como una especificación en lugar de un montón de detalles de implementación. Es realmente bueno mantener la estructura de las pruebas plana, por lo que quizás poner todo lo que una sola prueba necesita en un solo bloque de prueba y, por supuesto, utilizar afirmaciones explícitas y simples para que no tengas que calcular muchas cosas en tu cabeza para entender lo que hace la prueba. Y cuando se trata de características complejas, también puedes dividirlas en el nivel del sistema de archivos y obtener esta gran capacidad de descubrimiento y gran mantenimiento a medida que se desarrolla tu producto. Por supuesto, hay mucho más sobre la complejidad, pero eso es todo lo que tengo por hoy, así que asegúrate de seguirme en Twitter si te gustó esta charla y comparte conmigo algunas de tus experiencias sobre cómo lidiaste con la complejidad en las pruebas en el pasado. Espero que disfrutes esto y que tengas un buen día.
Comments