Contenido del curso
Escribiendo pruebas
Pruebas Unitarias
Integration Test & E2E
UI Test
Automatizar
Configurando supertest en el API
Contenido del curso
Configurando supertest en el API
Santiago Gonzalez
studentJose Gabriel Argüello
studentDavid Hilera
studentJuan Camilo Vega
studentFrancisco Alejandro García Munguía
studentJhonathan Andres Mauricio la Torre
studentjefred bedoya
studentDavid Antonio Garcia Saaib
studentNicolas Molina
teacherJorge Mario Martinez Martinez
studentAndrés Mauricio Gutiérrez Rojas
studentDaniel Achury
studentMiguel Angel Reyes Moreno
studentIván Antonio Bustos Calderón
studentconfiguración de jest
{ "moduleFileExtensions": ["js"], "rootDir": ".", "testEnvironment": "node", "testRegex": ".e2e.js$" }
script de package.json
"test:e2e": "jest --config ./e2e/jest-e2e.json --forceExit",
no se si lo veremos en las próximas clases pero lo podemos resolver con async/await :
describe('test for [GET]/', () => { test('should return "Hello World!', async () => { const response = await request(app).get('/'); console.log('response', response); expect(response.text).toEqual('Hello World!'); }); });
Gracias por el aporte.
Aparentemente al profe no le falla, pero es porque al usar --forceExit no espera que llegue la respuesta y obliga la salida del test. Sin embargo el mismo jest te manda un mensaje que uses --detectOpenHandles para manejar asincronía y es ahí cuando notas que la prueba en realidad no es pasada. Tu solución me ayudo a entender mejor como funciona, de nuevo gracias.
Ahora que he decidido no renovar la suscripción, encuentro tus cursos. Es una pena que no estés a cargo de la escuela de Javascript :S
Las pruebas e2e las guardamos en una carpeta aparte llamada e2e. En esa carpeta creamos el archivo de configuración de jest para las pruebas e2e "jest-e2e.json". En ese archivo le decimos a jest como correr nuestras pruebas de integración.
{ // Como van a ser nuestros archivos, nuestro stack. "moduleFileExtensions": ["js"], // Cuál es nuestra ruta principal "rootDir": ".", // Cuál es el ambiente de pruebas. "testEnvironment": "node", // Expresiónregular para reconocer pruebas "testRegex": ".e2e.js$" }
En nuestro package.json agregamos el siguiente comando en scripts:
"test:e2e": "jest --config ./e2e/jest-e2e.json --forceExit"
describe('GET /', () => { test('should return a hello world message', async () => { const response = await request(app).get('/'); console.log('🚀 ~ file: hello.e2e.js:20 ~ test ~ response:', response.text); expect(response.status).toBe(200); expect(response.text).toBe('Hello World!'); }); }); ``` describe('GET /', () => { test('should return a hello world message', async () => { const response = await request(app).get('/'); console.log('🚀 ~ file: hello.e2e.js:20 ~ test ~ response:', response.text); expect(response.status).toBe(200); expect(response.text).toBe('Hello World!'); }); });
Propósito de Supertest
Es una librería para pruebas de integración. Permite testear tus endpoints HTTP sin necesidad de levantar el servidor manualmente, simulando peticiones reales.
Configuración Clave
npm i -D supertest)..listen() en el archivo principal para evitar conflictos de puertos.GET, POST, PUT, DELETE.Flujo de una prueba
200, 404) y la estructura del cuerpo de respuesta.Hacer las request desde un postman cuenta como una prueba e2e? I mean, utilizando la DB conectada cuenta como 2e2?
Hola, no cuenta como e2e, ya que el objetivo de una prueba es que sea automatizada y pueda validar que cumpla con ciertos criterios y postman no lo haría. Pero Postman tiene Automated Testing en el cual si puedes llegar a escribir pruebas e2e con postman.
Error: Can't find a root directory while resolving a config file path. Provided path to resolve: ./e2e/jest-e2e.json
Recuerda ajustar el package.json con la ruta desde la que estés ejecutando las pruebas e2e, por lo menos a mi me sirvió este: "test:e2e": "jest --config ./api/e2e/jest-e2e.json --forceExit",
Hola, es necesario tener el proyecto que vamos a probar dentro de nuestro proyecto de pruebas?, considero que puede ser difícil de mantener cuando el proyecto es muy grande. otra pregunta, puedo tener un proyecto enfocado a probar una API alojada en la nube?
Ahora veo por qué a los QA les pagan muy bien :eyes:
En mi trabajo usamos las pruebas exportadas desde postman y las ejecutamos con newman en el proyecto. Me gusta más supertest, creo que sigue con la lógica de las unitarias y no se extrapola a una herramienta externa.