Contenido del curso
Fundamentos de unit testing en Angular
Testing en servicios
Proyecto
Testing en consultas HTTP
Bonus
Próximos pasos
Pruebas para GET
Contenido del curso
Pruebas para GET
Cesar Elías Armendariz Ruano
studentSOFIA IDARRAGA MUÑETON
studentAlejandro Jaimes
studentVamos a enfocarnos a pruebas Get cuya parametros son más complejos
para lo cual se requieren cambios en product services en la función getAll
product.service.ts
getAll(limit?: number, offset?: number): Observable<Product[]> { let params = new HttpParams(); if (limit && offset != null) { params = params.set('limit', limit); params = params.set('offset', offset); } return this.http.get<Product[]>(`${this.apiUrl}/products`, { params }) .pipe( retry(3), map(products => products.map(item => { return { ...item, taxes: .19 * item.price } })) ); }
ahora se puede poner a prueba todos los posibles resultados de getAll
product.service.spec.ts
describe('tests for getAll', () => { it('should return a product list', (doneFn) => { //Arrange const mockData: Product[] = generateManyProducts(3); //Act productsService.getAll() .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(); }); it('should return product list width taxes', (doneFn) => { // Arrange const mockData: Product[] = [ { ...generateOneProduct(), price: 100, //100 * .19 = 19 }, { ...generateOneProduct(), price: 200, //200 * .19 = 38 }, ]; //Act productsService.getAll() .subscribe((data) => { //Assert expect(data.length).toEqual(mockData.length); expect(data[0].taxes).toEqual(19); expect(data[1].taxes).toEqual(38); doneFn(); }); //http config const url = `${environment.API_URL}/api/v1/products`; const req = httpController.expectOne(url); req.flush(mockData); httpController.verify(); }); });
Me gustaría que no esperara hasta el final de la sesión para corregir las pruebas, hacer una prueba, probar si funciona, corregirla y seguir con la siguiente. Tal como se debe hacer en el mundo real
Para los que pueda que les este fallando la api como en mi caso.
Recordar agregar en la URL del servicio del metodo getAll(), el /products
getAll(limit?: number, offset?: number): Observable<Product[]> { let params = new HttpParams(); if (limit && offset) { params = params.set('limit', limit); params = params.set('offset', limit); } return this.http.get<Product[]>(`${this.apiUrl}/products`, { params }).pipe( retry(3), map((products) => products.map((item) => { return { ...item, taxes: 0.19 * item.price, }; }) ) ); }