No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

脷ltima oportunidad para asegurar tu aprendizaje por 1 a帽o a precio especial

Antes: $249

Currency
$189/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscr铆bete

Termina en:

0D
17H
12M
45S

Generando Fake Books

20/27
Recursos

Aportes 8

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

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

Consejo super pro, siempre lean la documentacion de las API鈥檚, algunas veces pueden deprecar la forma en la que se consume la data de la API, aparte que leer la documentacion ayuda mucho en el mundo real.

Me encanta las buenas pr谩cticas y la organizaci贸n de Nico en su c贸digo, se nota que tiene much铆sima experiencia

Excelente clase, y herramientas. Ahora me siento super bien con unit testing, jest y faker.js =)

Con lo que pas贸 con faker, ahora uso falso.
https://github.com/ngneat/falso

npm i @ngneat/falso --save-dev

Es mas o menos los mismo, para pruebas y migraciones est谩 bien.

incre铆ble esta herramienta, es muy 煤til!

El autro de esta librer铆a se puso un poco loco y da帽o aprop贸sito la librer铆a como forma de protesta. As铆 que no les recomiendo utilizar Faker.js.
Busquen la historia en google que se van a sorprender con tremenda novela.

Esta manera de crear los fake books me parece mejor, donde getSingleBook es la funcion createOneBook

const getBooks = (size = 10) => {
	const books = new Array(size)
		.fill({})
		.map(_book => getSingleBook())

	return books
}