Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Generando Fake Books

20/27
Recursos

Aportes 1

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Código Comentado

  • Instalando la librería fakejs.dev
 ~/.../testing-js/api   master ●  npm install @faker-js/faker --save-dev
  • Agregando la regla a /testing-js/api/.eslintrc.js
  rules: {
    'import/no-extraneous-dependencies': ['error', { devDependencies: true }],
  },
  • Configurando los parámetros deseados para nuestros casos.
const { faker } = require('@faker-js/faker');

const generateOneBook = () => ({
  _id: faker.datatype.uuid(),
  name: faker.commerce.productName(),
  price: faker.commerce.price(),
});

const generateManyBook = (size) => {
  const limit = size ?? 10; // Si no me envian el tamaño genero 10 libros.
  const fakeBooks = []; // Colocando los fakeBooks generados.
  for (let index = 0; index < limit; index += 1) {
    fakeBooks.push(generateOneBook());
  }
  return [...fakeBooks];
};

module.exports = { generateOneBook, generateManyBook };

  • Agregando la librería a los tests en /testing-js/api/src/services/books.service.test.js
const { generateManyBook } = require('../fakes/book.fake');
const BooksService = require('./books.service');
// Data de relleno preparada.
// Esta responsabilidad pasa a la librería fakejs.dev y se llama en el test unitario.
/*
const fakeBooks = [
  {
    _id: 1,
    name: 'Harry Potter 2',
  },
];
*/
// Para hacer pruebas de comportamiento se usa jest.fn().
// se cambia el nombre de spy a Mock para que el jest lo interprete bien.
const mockGetAll = jest.fn();

// Suplantación de la BD.
jest.mock('../lib/mongo.lib', () => jest.fn().mockImplementation(() => ({
  // Metodos a suplantar.
  getAll: mockGetAll, // Directo, sin fake y sin => function.
  // getAll: () => [...fakeBooks], // "data enlatada"
  create: () => {},
})));

describe('Test for BooksService', () => {
  let service;
  beforeEach(() => {
    service = new BooksService();
    // Limpiar los Mocks antes de cada caso para no dejar relleno del anterior.
    jest.clearAllMocks();
  });

  describe('test for getBooks', () => {
    test('should return a list book', async () => {
      // Arrange
      const fakeBooks = generateManyBook(20);
      mockGetAll.mockResolvedValue(fakeBooks);
      // Act
      const books = await service.getBooks({});
      console.log(books);
      // Assert
      expect(books.length).toEqual(fakeBooks.length);
      // Espiando
      expect(mockGetAll).toHaveBeenCalled(); // Para saber si fué llamado
      expect(mockGetAll).toHaveBeenCalledTimes(1); // cuantas veces es llamado
      expect(mockGetAll).toHaveBeenCalledWith('books', {}); // Con qué argumentos fué llamado.
    });

    test('should return a list book', async () => {
      // Arrange
      const fakeBooks = generateManyBook(4);
      mockGetAll.mockResolvedValue(fakeBooks);
      /*
        [{
          _id: 1,
          name: 'Harry Potter 3',
        }]);
      */
      // Act
      const books = await service.getBooks();
      console.log(books);
      // Assert
      expect(books[0].name).toEqual(fakeBooks[0].name);
    });
  });
});

Nota: Empecé con Harri Potter 2