No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Integration Test

22/27
Recursos

Aportes 4

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

ERROR

Si llegan a tener este error:

 ~/.../testing-js/api   master ●  npm run test:e2e

> [email protected] 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.

  • Profe @nicobites, será que lo hice bien?, porque creo que caí en una mala práctica pero funciona.

El que no se haya equivocado en un caracter programando que lance la primera piedra jaja

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);
    });
  });

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