No tienes acceso a esta clase

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

Mocking

18/27
Recursos

Aportes 6

Preguntas 6

Ordenar por:

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

// Creamos el libro fake que será devuelto por el mock

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

// Suplanta a nuestra mongoLib real

const mongoLibStub = {
  getAll: () ⇒ […fakeBooks],
c. reate: () ⇒ {},
}

// Suplantamos al método

jest.mock(’…/lib/mongo.lib’, () ⇒ jest.fn().mockImplementation(() ⇒ mongoLibStub))

Conforme avanza el curso me siento poderoso 😄

Mocking

Suplantando MongoLib

Se utilizo el método jest.mock, al cual se le indica la clase que va suplantar

jest.mock('../lib/mongo.lib', () => jest.fn().mockImplementation(() => MongoLibStub));

Para eso se crea la clase MongoLibStub, en la cual se contendrán los métodos getAll, y create los cuales servirán para retornar un resultado similar a la clase original.

const MongoLibStub = {
  getAll: () => fakeBooks,
  create: () => { },
};

fakeBooks hace referencia a un arreglo de objetos de tipo Book ficticios, los cuales serán retornados por el método getAll.

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

Con esto ya se suplantaría el comportamiento de la clase MongoLib y sus métodos, es importante mencionar que la clase MongoLibStub puede crecer con forme se necesite.

Se aconseja como buena practica utilizar el método clearAllMocks() de jest para hacer una limpia de los mocks creados anteriormente.

jest.clearAllMocks();

Tengo una duda: ¿Por qué manda a llamar a jest.ClearAllMocks() dentro de beforeEach()?

Es decir, el código del profe funciona, sin embargo si yo lo hubiese tenido que realizar, mi lógica me diría que lo pusiera dentro de afterAll por otro lado mi lógica me dice que el código del profe debería fallar y sin embargo no lo hace, no entiendo por qué?

NOTA: Intenté publicar esto como pregunta, pero no me dejó pues me indicaba que la pregunta ya había sido hecha y contestada, sin embargo las respuestas que me ofrecía eran sobre algo totalmente diiferente

Hice un test para createBook! Mi Stub seria el siguiente: ```js const MongoLibStub = { getAll: () => [...fakeBooks], create: (collection, object) => ({ id: 1, ...object, }), }; ```y mi test: ```js describe(('test for createBook'), () => { test('should return a book list', async () => { // Arrange const newBook = { name: 'Juramentada', author: 'Brandon Sanderson', }; // Act // En este momento no se usa el MongoLib original sino el Stub const books = await service.createBook(newBook); // Assert expect(books).toEqual({ id: 1, ...newBook }); }); }); ```No se si es redundante o de que otra forma se podria hacer! Recibo feedback
test("should return books", async () => {
    const books = await service.getBooks();

    expect(books).toBeTruthy();
    expect(books.length).toBe(1);
    expect(books[0].name).toBe("harry potter");
  });