Muy interesante este curso, no entiendo por qué no tiene más visualizaciones.
Introduccion
¿Qué es el testing?
La piramide del testing
Hablemos sobre deuda técnica
Herramientas de testing
Creando el proyecto
Tu primer test
Escribiendo pruebas
Pruebas estáticas
Assertions / matchers
Setup and Teardown
Implementado Setup
Tipos de pruebas
Metodologías
Pruebas Unitarias
Pruebas unitarias
Coverage report
Instalación de Docker para este curso
Proyecto de API
Mocking, Stub, doubles
Mocking
Spies
Generando Fake Books
Integration Test & E2E
Configurando supertest en el API
Integration Test
e2e
UI Test
UI Test
Automatizar
Unit tests en GitHubActions
E2E en GitHubActions
¿Quieres más cursos de testing?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Nicolas Molina
Aportes 10
Preguntas 4
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
.
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
.
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');
});
});
});
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?