Hola, debes tener en cuenta que las últimas versiones de FakerJS la importación debe ser así:
import { faker } from '@faker-js/faker';
Introducción
Unit testing para servicios en Angular
Jest vs. Jasmine: entornos de testing para Angular
Fundamentos de unit testing en Angular
Tu primera prueba en Angular
Explorando matchers
Reporte de coverage
Mocha Report
Testing en servicios
Pruebas unitarias para servicios
Servicios con dependencias
Spies
Angular TestBed
TestBed + Spies
Proyecto
Setup y maquetación del proyecto
Product Service Http
Testing en consultas HTTP
HttpClientTestingModule
Generando Mocks
Pruebas para GET
Pruebas maliciosas para GET
Pruebas para POST
Pruebas para PUT y DELETE
Bonus
Pruebas a errores
Pruebas con interceptores
Pruebas al login
Pruebas a la API del navegador
GitHub Actions
Próximos pasos
Toma el Curso de Angular: Unit Testing para Componentes
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 10
Preguntas 3
Hola, debes tener en cuenta que las últimas versiones de FakerJS la importación debe ser así:
import { faker } from '@faker-js/faker';
No es necesario crear data manualmente para hacer las pruebas de conexión a las API, se puede generar de manera automatizada utilizando una lebrería que genera datos de forma aleatoria.
desde la terminal vamos a instalarla
npm i faker-js/faker --save-dev
ahora vamos a crear un archivo llamado product.mock.ts en la carpeta de models, donde crearemos data de prueba con faker
product.mock.ts
import { faker } from '@faker-js/faker';
import { Product } from './product.model';
export const generateOneProduct = (): Product => {
return {
id: faker.datatype.uuid(),
title: faker.commerce.productName(),
price: parseInt(faker.commerce.price(), 10),
description: faker.commerce.productDescription(),
category: {
id: faker.datatype.number(),
name: faker.commerce.department()
},
images: [faker.image.imageUrl(), faker.image.imageUrl()]
};
}
export const generateManyProducts = (size = 10): Product[] => {
const products: Product[] = [];
for (let index = 0; index < size ; index++) {
products.push(generateOneProduct());
}
return [...products];
}
finalmente haremos los siguientes cambios en product.service.spec.ts haciendo una importación de product.mock.ts
product.service.spec.ts
import { generateManyProducts } from '../models/product.mock';
describe('tests for getAllSimple', () => {
it('should return a product list', () => {
//Arrange
const mockData: Product[] = generateManyProducts(2);
//Act
productsService.getAllSimple()
.subscribe((data) => {
//Assert
expect(data.length).toEqual(mockData.length);
//doneFn();
});
//http config
const url = `${environment.API_URL}/api/v1/products`;
const req = httpController.expectOne(url);
req.flush(mockData);
httpController.verify();
});
});
Quizá muchos ya sepan esto, peero, si no, puedes utilizar la desestructuración para que sea un poco más cómodo utilizar faker al generar los objectos, algo así:
const {commerce, datatype, image} = faker;
return {
id: datatype.uuid(),
taxes: 2,
category: {
id: datatype.number(),
name: commerce.department()
},
description: commerce.productDescription(),
images: [image.imageUrl(), image.imageUrl()],
price: parseInt(commerce.price()),
title: commerce.productName()
};
Para quienes utilizan yarn, lo pueden instalar con:
yarn add @faker-js/faker --save-dev
Yo me pregunto, esto de las pruebas cada vez se complica más y puede llegar un momento que tengamos mucho código implementado en test unitarios etc ¿Qué pasa si las pruebas están mal y dan falsos positivos? ¿Quién hace el test de los tests?, ¿Quién vigila al vigilante?
Para probar nuestros servicios que hacen peticiones, fácilmente podríamos poner datos falso de manera manual y jugar con ellos, pero a la larga, agregar esos datos falsos puede ser algo repetitivo y tedioso, que puede hacer crecer nuestro código.
En estos casos, sería útil encontrar una forma de poblar esos datos de manera aleatoria. La solución, es hacer uso de la librería Faker.js.
💡 Faker.js es una librería JavaScript que se utiliza para generar datos aleatorios, como nombres, direcciones, números de teléfono y otros tipos de información. La librería proporciona una amplia variedad de métodos para generar diferentes tipos de datos y permite personalizar la salida para adaptarse a tus necesidades.
Esta librería la puedes utilizar para rellenar tu base de datos de prueba con datos aleatorios o para generar datos de prueba para tus pruebas unitarias o de integración.
⚠️ Es importante tener en cuenta que los datos generados por Faker.js no son reales y no deben utilizarse para fines serios o de producción.
Para utilizar Faker.js, debes instalar la librería a través de npm con el comando npm i -D @faker-js/faker
y luego importarla en tu proyecto. Una vez importada, puedes utilizar sus métodos para generar datos aleatorios.
Por ejemplo, para generar un nombre aleatorio puedes utilizar el método
faker.name.findName()
. También puedes utilizar la propiedadfaker.locale
para cambiar el idioma de la salida y la propiedadfaker.seed
para establecer una semilla aleatoria para reproducir resultados específicos.
Para probar nuestros servicios que hacen peticiones, fácilmente podríamos poner datos falso de manera manual y jugar con ellos, pero a la larga, agregar esos datos falsos puede ser algo repetitivo y tedioso, que puede hacer crecer nuestro código.
En estos casos, sería útil encontrar una forma de poblar esos datos de manera aleatoria. Para lo cual, podemos hacer uso de la librería Faker.js.
💡 Faker.js es una librería JavaScript que se utiliza para generar datos aleatorios, como nombres, direcciones, números de teléfono y otros tipos de información. La librería proporciona una amplia variedad de métodos para generar diferentes tipos de datos y permite personalizar la salida para adaptarse a tus necesidades.
Esta librería la puedes utilizar para rellenar tu base de datos de prueba con datos aleatorios o para generar datos de prueba para tus pruebas unitarias o de integración.
⚠️ Es importante tener en cuenta que los datos generados por Faker.js no son reales y no deben utilizarse para fines serios o de producción.
Para utilizar Faker.js, debes instalar la librería a través de npm con el comando npm i -D @faker-js/faker
y luego importarla en tu proyecto. Una vez importada, puedes utilizar sus métodos para generar datos aleatorios.
Por ejemplo, para generar un nombre aleatorio puedes utilizar el método
faker.name.findName()
. También puedes utilizar la propiedadfaker.locale
para cambiar el idioma de la salida y la propiedadfaker.seed
para establecer una semilla aleatoria para reproducir resultados específicos.
Si no quieren generar un for en generateManyProducts, pueden hacer lo siguiente:
export const generateManyProducts = ( size = 10 ) => {
return new Array( size )
.fill( null )
.map( () => ( { ...generateOneTicket() } ) );
}
Curso sobresaliente , gracias Nicolás por el empeño que pones en tus videos !
Me fue de mucha utilidad este capitulo de mock, gracias crack.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.