Configuración de Entorno de Pruebas para Aplicaciones Node.js con Twen.js

Clase 7 de 25Curso de End to End Testing para APIs REST con Node.js

Resumen

¿Cómo modularizar aplicaciones para entornos de desarrollo y pruebas?

Al crear aplicaciones complejas, una de las habilidades fundamentales es poder modularizarlas de manera adecuada para garantizar que las pruebas se realicen de manera efectiva en un entorno que simula fielmente la producción. Este proceso garantiza que cualquier cambio en el código se pueda probar antes de desplegarse. Vamos a explorar cómo hacer esto paso a paso.

¿Qué aspectos considerar para separar las responsabilidades?

Separar responsabilidades es una buena práctica en el desarrollo de software que ayuda a mantener el código limpio y manejable. Esto además permite que la aplicación pueda correr tanto en entornos de desarrollo normales como en entornos de prueba.

  1. Setup: Esta es la etapa en la que se establece toda la configuración de la aplicación como los routers, middlewares y configuraciones de seguridad.
  2. Escucha: Esta es la parte en la que la aplicación empieza a recibir solicitudes en un puerto específico.

Para implementar esta separación, es común crear un archivo dedicado que contenga la función encargada del setup.

// En app.js
function createApp() {
    const app = express();
    app.use(cors());
    // Configuración de routers y middlewares
    return app;
}
module.exports = createApp;

¿Cómo estructuramos la aplicación principal para producción y pruebas?

Una vez separadas las responsabilidades, la aplicación principal puede importar esta configuración y decidir si correrá en un entorno de desarrollo o de pruebas. En un archivo como index.js, simplemente se importa la función y se le crea su contexto:

// En index.js
const createApp = require('./app');
const app = createApp();
const PORT = process.env.PORT || 9000;

app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

¿Cómo crear endpoints de prueba en una aplicación real?

Para validar que nuestras pruebas son efectivas, es importante tener endpoints de prueba. Si no existen, se deben crear, siguiendo la arquitectura en la que se lanzó la aplicación de producción.

  1. Definir el endpoint: Se puede definir un endpoint simple como /hello y especificar la respuesta que debería generar.
// Ejemplo de creación de endpoint
app.get('/hello', (req, res) => {
    res.status(200).json({
        name: "Nico"
    });
});
  1. Probar el endpoint: Utiliza herramientas como Postman o Insomnia para verificar que el endpoint responde correctamente con el nombre y status esperado.

¿Qué aprenderás en próximas sesiones?

Ahora que has aprendido a ajustar la arquitectura para pruebas, el siguiente paso es hacer un seguimiento del "coverage" de las pruebas. Te guiaré en cómo configurar reportes para medir cuál es el porcentaje de cobertura de los tests en nuestros endpoints. ¡Avancemos juntos hacia el dominio de pruebas E2E!