Integration Test
Clase 22 de 27 • Curso de Introducción al Testing con JavaScript
Contenido del curso
Clase 22 de 27 • Curso de Introducción al Testing con JavaScript
Contenido del curso
Edgar Mauricio Pérez Rojas
Anthony Quintero
Mateo Loaiza Rios
Miguel Andrés Ferreira Sandoval
Rubén Ernesto Aragón Gil
Gilberto Santamaria
Edgar Mauricio Pérez Rojas
Jose Gabriel Argüello
Joaquin Araujo
Nicolas Molina
angel mundo
Alejandro Paladines
ERROR
Si llegan a tener este error:
~/.../testing-js/api master ● npm run test:e2e > api@1.0.0 test:e2e > jest --config ./e2e/jest-e2e.json --forceExit PASS e2e/hello.e2e.js FAIL e2e/books.e2e.js ● Test suite failed to run ReferenceError: Cannot access 'mockGetAll' before initialization 13 | jest.mock('../src/lib/mongo.lib', () => jest.fn().mockImplementation(() => ({ 14 | // Metodos a suplantar. > 15 | getAll: mockGetAll, | ^ 16 | create: () => {}, 17 | }))); 18 | at mockConstructor.<anonymous> (books.e2e.js:15:11) at new BooksService (../src/services/books.service.js:6:20) at Object.<anonymous> (../src/routes/books.router.js:5:17) Test Suites: 1 failed, 1 passed, 2 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 2.384 s Ran all test suites. Force exiting Jest: Have you considered using `--detectOpenHandles` to detect async operations that kept running after all tests finished?
Yo lo solucioné declarando mockGetAll arriba de las importaciones así:
// Esta es una prueba de integración, pero lleva la extensión e2e.js para que... // ... lo ejecute testRegex del archivo de configuración de Supertest (jest-e2e.json). const mockGetAll = jest.fn(); // Tocó subirla para que la llame bien en el test. const request = require('supertest'); const { generateManyBook } = require('../src/fakes/book.fake'); const createApp = require('../src/app');
Ojo: generateManyBook no puede importarse encima de request.
Muchas gracias bro... Pero en realidad no entendí xq se genera el error y se resuelve cortando y pegando la línea mas arriba.
Esperemos la respuesta del profesor...
El que no se haya equivocado en un caracter programando que lance la primera piedra jaja
Así es padrino, yo por mover una letra no me daba más que error jaja
Nota importante, si en el minuto 4 no les corre el test como al profe, es por que deben tener arriba el docker con la base de datos
¿Profe @nicobites, en la sección de aportes dejé un error que me salió, será que lo hice bien?, porque creo que caí en una mala práctica, pero funciona, sumercé tiene otra solución?
otra forma de resolverlo usando "async/await' :
describe('test for [GET]/api/v1/books', () => { test('should return the list books', async () => { // arrange const fakeBooks = generateManyBooks(3); mockGetAll.mockResolvedValue(fakeBooks); // Act const response = await request(app).get('/api/v1/books'); console.log(response); // Assert expect(response.body.length).toEqual(fakeBooks.length); }); });
¿Quien sabe donde esta el link para ver el repo?
Hola, mira este es el link https://github.com/platzi/curso-testing-js
La prueba de integración (integration test) es un tipo de test en la que se verifica la interacción entre diferentes componentes de un sistema. A diferencia de las pruebas unitarias, que evalúan una única parte del código, las pruebas de integración aseguran que múltiples módulos funcionan juntos como se espera. Esto se realiza simulando las interacciones entre los componentes, como la comunicación entre una API y la base de datos, para identificar problemas de integración que podrían no ser evidentes en pruebas aisladas.
Si tienes el error
ReferenceError: Cannot access 'mockSpyGetAll' before initialization 6 | 7 | jest.mock('../src/lib/mongo.lib', () => jest.fn().mockImplementation(() => ({ > 8 | getAll: mockSpyGetAll, | ^ 9 | create: () => {}, 10 | }))); 11 |
Debes declarar los mocks antes que el createApp
const mockSpyGetAll = jest.fn(); jest.mock('../src/lib/mongo.lib', () => jest.fn().mockImplementation(() => ({ getAll: mockSpyGetAll, create: () => {}, }))); const createApp = require('../src/app');