No tienes acceso a esta clase

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

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

0D
7H
0M
44S

Spies

19/27
Recursos

Aportes 5

Preguntas 2

Ordenar por:

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

o inicia sesi贸n.

Muy interesante este curso, no entiendo por qu茅 no tiene m谩s visualizaciones.

const fakeBooks = [
  { _id: 1, name: 'Harry Potter' },
  { _id: 2, name: 'Harry Potter 2' },
  { _id: 3, name: 'Harry Potter 3' },
];

const mockGetAll = jest.fn(); Es una funcion fantasma que manejaremos.

jest.mock('../lib/mongo.lib', () => jest.fn().mockImplementation(() => ({
  getAll: mockGetAll,
  create: () => { },
})));

jest.mock('../lib/mongo.lib' Suplanta a la llamada de la libreria de mongo, para que cuando sea llamada en su lugar ejecute otro jest.fn(), y mediante mockImplementation sea seteado el objeto con el metodo getAll: mockGetAll.

beforeEach

let service;
  beforeEach(() => {
    service = new BooksService();
  });

service = new BooksService() crea una instancia de BookService, que ya contiene la trampa que al llamar a mongo, lo suplanta con los metodos getAll y create.

Test

mockGetAll.mockResolvedValue([...fakeBooks])
const books = await service.getBooks({})
expect(books.length).toEqual(3);
expect(mockGetAll).toHaveBeenCalled()
expect(mockGetAll).toHaveBeenCalledWith('books', {})
expect(mockGetAll).toHaveBeenCalledTimes(1)

Seteamos que cuando mockGetAll sea llamado retorne fakeBooks.
service.getBooks({}) hace una llamada al servicio.
Los expect son en si ifs que ven el detalle de la data.
expect(books.length).toEqual(3) verifica que la respuesta tenga tres posiciones.
expect(mockGetAll).toHaveBeenCalled() Verifica que haya sido llamada esta funcion fake.
鈥 y asi xD

Este comentario lo hab铆a hecho antes pero lo vuelvo a hacer por si alguien se le pas贸:

Para evitar errores de typo con Jest y que VS Code pueda autocompletar c贸digo de Jest, instalen esta dependencia de npm:

npm i @types/jest -D

As铆 me evit茅 el error que tuvo el profe Nico 馃槃

const BooksService = require('./books.service');

const fakeBooks = [
  {
    _id: 1,
    name: 'Harry Potter',
  },
];

const mockGetAll = jest.fn();

jest.mock('../lib/mongo.lib', () => jest.fn().mockImplementation(() => ({
  getAll: mockGetAll,
  create: () => {},
})));

describe('Test for BooksService', () => {
  let service;
  beforeEach(() => {
    service = new BooksService();
    jest.clearAllMocks();
  });

  describe('test for getBooks', () => {
    test('should return a list book', async () => {
      // Arrange
      mockGetAll.mockResolvedValue(fakeBooks);
      // Act
      const books = await service.getBooks({});
      console.log(books);
      // Assert
      expect(books.length).toEqual(1);
      expect(mockGetAll).toHaveBeenCalled();
      expect(mockGetAll).toHaveBeenCalledTimes(1);
      expect(mockGetAll).toHaveBeenCalledWith('books', {});
    });

    test('should return a list book', async () => {
      mockGetAll.mockResolvedValue([{
        _id: 1,
        name: 'Harry putter 2',
      }]);
      const books = await service.getBooks({});
      console.log(books);
      expect(books[0].name).toEqual('Harry putter 2');
    });
  });
});

Spies

Los spies son muy utiles para realizar pruebas de caja blanca.

Para este ejemplo se va espiar el comportamiento de le m茅todo getAll .

Para realizar esto debemos crear una variable y asignarla a una funci贸n de jest.

const mockGetAll = jest.fn();

Despu茅s dentro de MongoLibStub, donde declaramos a getAll, le asignamos mockGetAll.

{
  getAll: mockGetAll,
}

Ahora modificamos la respuesta del m茅todo getAll, con la funci贸n mockResolvedValue(fakeBooks)

// Retorna una promesa
mockGetAll.mockResolvedValue(fakeBooks);

Y ahora podemos utilizar los m茅todos toHaveBeenCalled toHaveBeenCalledTimes toHaveBeenCalledWith para espiar y comprabor que el comportamiento interno de nuestro m茅todo sea el correcto.

expect(mockGetAll).toHaveBeenCalled();
expect(mockGetAll).toHaveBeenCalledTimes(1);
expect(mockGetAll).toHaveBeenCalledWith('books', {});

Consideraciones

  • Es importante anteponer el nombre mock a la variable que contendr谩 la funci贸n de jest.
  • Jest tiene una carpeta espacial para almacenar los mocks, ya que antes de correr los test ejecuta los mocks.