CursosEmpresasBlogLiveConfPrecios

Generando Mocks

Clase 15 de 25 • Curso de Angular: Unit Testing para Servicios

Clase anteriorSiguiente clase

Contenido del curso

Introducción

  • 1
    Unit testing para servicios en Angular

    Unit testing para servicios en Angular

    00:56 min
  • 2
    Jest vs. Jasmine: entornos de testing para Angular

    Jest vs. Jasmine: entornos de testing para Angular

    13:39 min

Fundamentos de unit testing en Angular

  • 3
    Tu primera prueba en Angular

    Tu primera prueba en Angular

    10:03 min
  • 4
    Explorando matchers

    Explorando matchers

    09:46 min
  • 5
    Reporte de coverage

    Reporte de coverage

    10:13 min
  • 6
    Mocha Report

    Mocha Report

    07:42 min

Testing en servicios

  • 7
    Pruebas unitarias para servicios

    Pruebas unitarias para servicios

    15:55 min
  • 8
    Servicios con dependencias

    Servicios con dependencias

    17:52 min
  • 9
    Spies

    Spies

    10:38 min
  • 10
    Angular TestBed

    Angular TestBed

    04:55 min
  • 11
    TestBed + Spies

    TestBed + Spies

    09:21 min

Proyecto

  • 12
    Setup y maquetación del proyecto

    Setup y maquetación del proyecto

    10:55 min
  • 13
    Product Service Http

    Product Service Http

    12:31 min

Testing en consultas HTTP

  • 14
    HttpClientTestingModule

    HttpClientTestingModule

    16:57 min
  • 15
    Generando Mocks

    Generando Mocks

    Viendo ahora
  • 16
    Pruebas para GET

    Pruebas para GET

    09:10 min
  • 17
    Pruebas maliciosas para GET

    Pruebas maliciosas para GET

    09:54 min
  • 18
    Pruebas para POST

    Pruebas para POST

    13:51 min
  • 19
    Pruebas para PUT y DELETE

    Pruebas para PUT y DELETE

    05:23 min

Bonus

  • 20
    Pruebas a errores

    Pruebas a errores

    12:38 min
  • 21
    Pruebas con interceptores

    Pruebas con interceptores

    12:43 min
  • 22
    Pruebas al login

    Pruebas al login

    12:01 min
  • 23
    Pruebas a la API del navegador

    Pruebas a la API del navegador

    14:01 min
  • 24
    GitHub Actions

    GitHub Actions

    21:24 min

Próximos pasos

  • 25
    Toma el Curso de Angular: Unit Testing para Componentes

    Toma el Curso de Angular: Unit Testing para Componentes

    01:04 min
  • Tomar el examen del curso
    • Nicolas Molina

      Nicolas Molina

      teacher•
      hace 4 años

      Hola, debes tener en cuenta que las últimas versiones de FakerJS la importación debe ser así:

      import { faker } from '@faker-js/faker';
      Cesar Elías Armendariz Ruano

      Cesar Elías Armendariz Ruano

      student•
      hace 4 años

      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.

      Faker js

      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();     });   });
        KEVIN SUÁREZ GUZMAN

        KEVIN SUÁREZ GUZMAN

        student•
        hace 4 años

        Genial…

      Franco Amoroso

      Franco Amoroso

      student•
      hace 2 años

      faker.datatype.uuid() esta deprecado, utilicen este otro

      id: faker.string.uuid(),

      segun la documentacion de Faker

      Doc

      Faker string
        Franco Amoroso

        Franco Amoroso

        student•
        hace 2 años

        Lo mismo con: faker.image.imageUrl() y faker.datatype.number() reemplazar con:

        faker.image.url()
        faker.number.int()
      Eduardo García Bautista

      Eduardo García Bautista

      student•
      hace 4 años

      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() };
      Kevin Candia

      Kevin Candia

      student•
      hace 3 años

      Tengo un problema al importar faker:

      Cannot find module '@faker-js/faker' or its corresponding type declarations. import { faker } from '@faker-js/faker';

      package.json:

      "devDependencies": { "@angular-devkit/build-angular": "~13.3.4", "@angular/cli": "~13.3.4", "@angular/compiler-cli": "~13.3.0", "@faker-js/faker": "github:faker-js/faker", "@types/jasmine": "~3.10.0", "@types/node": "^12.11.1", "jasmine-core": "~4.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.1.0", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "~1.7.0", "karma-mocha-reporter": "^2.2.5", "typescript": "~4.6.2", "webpack-bundle-analyzer": "^4.6.1" }

      Y existe el directorio @faker-js/faker en mi node_modules A alguien le ha ocurrido lo mismo ?

        Ricardo Rincon

        Ricardo Rincon

        student•
        hace 3 años

        tengo el mismo problema

        Denil José Parada Cabrera

        Denil José Parada Cabrera

        student•
        hace 3 años

        ¿alguien ya pudo arreglar eso?

        Tengo el mismo problema @Nicolas Molina

      Carlos Alejandro Hernández Mejía

      Carlos Alejandro Hernández Mejía

      student•
      hace 3 años

      Generando Mocks


      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 propiedad faker.locale para cambiar el idioma de la salida y la propiedad faker.seed para establecer una semilla aleatoria para reproducir resultados específicos.

      Cesar Eduardo Valle Pino

      Cesar Eduardo Valle Pino

      student•
      hace 4 años

      Para quienes utilizan yarn, lo pueden instalar con: yarn add @faker-js/faker --save-dev

      gabriela cressa

      gabriela cressa

      student•
      hace 2 años

      Tengo un problema al importar faker:

      Cannot find module '@faker-js/faker' or its corresponding type declarations.

      import { faker } from '@faker-js/faker'; hola tengo este mismo problema alguien podra ayudarme??

        Platzi

        Platzi

        student•
        hace 2 años

        El problema que estás experimentando se debe a que estás importando incorrectamente el módulo de faker. La forma correcta de importarlo es: import faker from 'faker'. Asegúrate de tener instalada la última versión de faker y de utilizar la importación correcta.

      Marcos Galaviz

      Marcos Galaviz

      student•
      hace 3 años

      Buen dia excelente curso pero creo que no me queda tan claro como hacerlo por ejemplo con servicios como firebase, tengo un servicio con algo como esto:

      import { AngularFirestore, AngularFirestoreCollection } from '@angular/fire/compat/firestore';

      constructor( private afs: AngularFirestore, )

      y aqui lo utilizo:

      getRestauranteConfig(restauranteId: string){ this.afs.doc<Restaurante>(restaurantes/${restauranteId}) .valueChanges().subscribe(

      Pero no puedo hacer el test correctamente porque me marca error ahi en el this.afs.doc ... ¿como deberia probar estos casos o cual seria el mejor camino? Muchas gracias a quien se tome el tiempo de responder

      Mauricio Garibello Rodriguez

      Mauricio Garibello Rodriguez

      student•
      hace 4 años

      Que son cosas de mutación ? Problemas de mutación?

      Yessica Alexandra Malaver Gómez

      Yessica Alexandra Malaver Gómez

      student•
      hace 8 meses

      Los problemas de mutación ocurren cuando se modifica un objeto o array original, lo que puede causar efectos secundarios no deseados en otras partes del código. Al usar la sintaxis [...array], se crea una copia del array original, evitando cambios en su contenido. Esto es importante en Angular y en otras tecnologías para mantener la inmutabilidad y facilitar la gestión de estado, especialmente en aplicaciones reactivas. Retornar un nuevo array ayuda a mantener la predictibilidad y la integridad de los datos en el flujo de trabajo.

      Jessica Silvia Payano Castro

      Jessica Silvia Payano Castro

      student•
      hace 10 meses

      A mi me funciono hacer esto:

      npm uninstall @faker-js/faker npm install @faker-js/faker@latest --save-dev

      Andres Delgado Rivera

      Andres Delgado Rivera

      student•
      hace un año

      Cuando sé que es necesario cuidarme de problemas de mutación ? que problemas estos pueden generar

      David Mares

      David Mares

      student•
      hace un año

      me funciono import faker from 'faker';

      en vez de import faker from '@faker-js/faker';

      Adrian Guevara

      Adrian Guevara

      student•
      hace 2 años

      Hola, para los que les da error al instalar la última versión de faker, acá una solución para instalar una versión anterior que si funciona.

      npm i @types/faker@5.5.3 --save-dev npm i faker@5.5.3 --save-dev
      Juan Luna

      Juan Luna

      student•
      hace 3 años

      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?

      Carlos Alejandro Hernández Mejía

      Carlos Alejandro Hernández Mejía

      student•
      hace 3 años

      Generando Mocks


      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 propiedad faker.locale para cambiar el idioma de la salida y la propiedad faker.seed para establecer una semilla aleatoria para reproducir resultados específicos.

      Kevin Candia

      Kevin Candia

      student•
      hace 3 años

      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() } ) ); }
      Joel Osvaldo Santos Soto

      Joel Osvaldo Santos Soto

      student•
      hace 3 años

      Curso sobresaliente , gracias Nicolás por el empeño que pones en tus videos !

      Ivan Manrique

      Ivan Manrique

      student•
      hace 3 años

      Me fue de mucha utilidad este capitulo de mock, gracias crack.

    Escuelas

    • Desarrollo Web
      • Fundamentos del Desarrollo Web Profesional
      • Diseño y Desarrollo Frontend
      • Desarrollo Frontend con JavaScript
      • Desarrollo Frontend con Vue.js
      • Desarrollo Frontend con Angular
      • Desarrollo Frontend con React.js
      • Desarrollo Backend con Node.js
      • Desarrollo Backend con Python
      • Desarrollo Backend con Java
      • Desarrollo Backend con PHP
      • Desarrollo Backend con Ruby
      • Bases de Datos para Web
      • Seguridad Web & API
      • Testing Automatizado y QA para Web
      • Arquitecturas Web Modernas y Escalabilidad
      • DevOps y Cloud para Desarrolladores Web
    • English Academy
      • Inglés Básico A1
      • Inglés Básico A2
      • Inglés Intermedio B1
      • Inglés Intermedio Alto B2
      • Inglés Avanzado C1
      • Inglés para Propósitos Específicos
      • Inglés de Negocios
    • Marketing Digital
      • Fundamentos de Marketing Digital
      • Marketing de Contenidos y Redacción Persuasiva
      • SEO y Posicionamiento Web
      • Social Media Marketing y Community Management
      • Publicidad Digital y Paid Media
      • Analítica Digital y Optimización (CRO)
      • Estrategia de Marketing y Growth
      • Marketing de Marca y Comunicación Estratégica
      • Marketing para E-commerce
      • Marketing B2B
      • Inteligencia Artificial Aplicada al Marketing
      • Automatización del Marketing
      • Marca Personal y Marketing Freelance
      • Ventas y Experiencia del Cliente
      • Creación de Contenido para Redes Sociales
    • Inteligencia Artificial y Data Science
      • Fundamentos de Data Science y AI
      • Análisis y Visualización de Datos
      • Machine Learning y Deep Learning
      • Data Engineer
      • Inteligencia Artificial para la Productividad
      • Desarrollo de Aplicaciones con IA
      • AI Software Engineer
    • Ciberseguridad
      • Fundamentos de Ciberseguridad
      • Hacking Ético y Pentesting (Red Team)
      • Análisis de Malware e Ingeniería Forense
      • Seguridad Defensiva y Cumplimiento (Blue Team)
      • Ciberseguridad Estratégica
    • Liderazgo y Habilidades Blandas
      • Fundamentos de Habilidades Profesionales
      • Liderazgo y Gestión de Equipos
      • Comunicación Avanzada y Oratoria
      • Negociación y Resolución de Conflictos
      • Inteligencia Emocional y Autogestión
      • Productividad y Herramientas Digitales
      • Gestión de Proyectos y Metodologías Ágiles
      • Desarrollo de Carrera y Marca Personal
      • Diversidad, Inclusión y Entorno Laboral Saludable
      • Filosofía y Estrategia para Líderes
    • Diseño de Producto y UX
      • Fundamentos de Diseño UX/UI
      • Investigación de Usuarios (UX Research)
      • Arquitectura de Información y Usabilidad
      • Diseño de Interfaces y Prototipado (UI Design)
      • Sistemas de Diseño y DesignOps
      • Redacción UX (UX Writing)
      • Creatividad e Innovación en Diseño
      • Diseño Accesible e Inclusivo
      • Diseño Asistido por Inteligencia Artificial
      • Gestión de Producto y Liderazgo en Diseño
      • Diseño de Interacciones Emergentes (VUI/VR)
      • Desarrollo Web para Diseñadores
      • Diseño y Prototipado No-Code
    • Contenido Audiovisual
      • Fundamentos de Producción Audiovisual
      • Producción de Video para Plataformas Digitales
      • Producción de Audio y Podcast
      • Fotografía y Diseño Gráfico para Contenido Digital
      • Motion Graphics y Animación
      • Contenido Interactivo y Realidad Aumentada
      • Estrategia, Marketing y Monetización de Contenidos
    • Desarrollo Móvil
      • Fundamentos de Desarrollo Móvil
      • Desarrollo Nativo Android con Kotlin
      • Desarrollo Nativo iOS con Swift
      • Desarrollo Multiplataforma con React Native
      • Desarrollo Multiplataforma con Flutter
      • Arquitectura y Patrones de Diseño Móvil
      • Integración de APIs y Persistencia Móvil
      • Testing y Despliegue en Móvil
      • Diseño UX/UI para Móviles
    • Diseño Gráfico y Arte Digital
      • Fundamentos del Diseño Gráfico y Digital
      • Diseño de Identidad Visual y Branding
      • Ilustración Digital y Arte Conceptual
      • Diseño Editorial y de Empaques
      • Motion Graphics y Animación 3D
      • Diseño Gráfico Asistido por Inteligencia Artificial
      • Creatividad e Innovación en Diseño
    • Programación
      • Fundamentos de Programación e Ingeniería de Software
      • Herramientas de IA para el trabajo
      • Matemáticas para Programación
      • Programación con Python
      • Programación con JavaScript
      • Programación con TypeScript
      • Programación Orientada a Objetos con Java
      • Desarrollo con C# y .NET
      • Programación con PHP
      • Programación con Go y Rust
      • Programación Móvil con Swift y Kotlin
      • Programación con C y C++
      • Administración Básica de Servidores Linux
    • Negocios
      • Fundamentos de Negocios y Emprendimiento
      • Estrategia y Crecimiento Empresarial
      • Finanzas Personales y Corporativas
      • Inversión en Mercados Financieros
      • Ventas, CRM y Experiencia del Cliente
      • Operaciones, Logística y E-commerce
      • Gestión de Proyectos y Metodologías Ágiles
      • Aspectos Legales y Cumplimiento
      • Habilidades Directivas y Crecimiento Profesional
      • Diversidad e Inclusión en el Entorno Laboral
      • Herramientas Digitales y Automatización para Negocios
    • Blockchain y Web3
      • Fundamentos de Blockchain y Web3
      • Desarrollo de Smart Contracts y dApps
      • Finanzas Descentralizadas (DeFi)
      • NFTs y Economía de Creadores
      • Seguridad Blockchain
      • Ecosistemas Blockchain Alternativos (No-EVM)
      • Producto, Marketing y Legal en Web3
    • Recursos Humanos
      • Fundamentos y Cultura Organizacional en RRHH
      • Atracción y Selección de Talento
      • Cultura y Employee Experience
      • Gestión y Desarrollo de Talento
      • Desarrollo y Evaluación de Liderazgo
      • Diversidad, Equidad e Inclusión
      • AI y Automatización en Recursos Humanos
      • Tecnología y Automatización en RRHH
    • Finanzas e Inversiones
      • Fundamentos de Finanzas Personales y Corporativas
      • Análisis y Valoración Financiera
      • Inversión y Mercados de Capitales
      • Finanzas Descentralizadas (DeFi) y Criptoactivos
      • Finanzas y Estrategia para Startups
      • Inteligencia Artificial Aplicada a Finanzas
      • Domina Excel
      • Financial Analyst
      • Conseguir trabajo en Finanzas e Inversiones
    • Startups
      • Fundamentos y Validación de Ideas
      • Estrategia de Negocio y Product-Market Fit
      • Desarrollo de Producto y Operaciones Lean
      • Finanzas, Legal y Fundraising
      • Marketing, Ventas y Growth para Startups
      • Cultura, Talento y Liderazgo
      • Finanzas y Operaciones en Ecommerce
      • Startups Web3 y Blockchain
      • Startups con Impacto Social
      • Expansión y Ecosistema Startup
    • Cloud Computing y DevOps
      • Fundamentos de Cloud y DevOps
      • Administración de Servidores Linux
      • Contenerización y Orquestación
      • Infraestructura como Código (IaC) y CI/CD
      • Amazon Web Services
      • Microsoft Azure
      • Serverless y Observabilidad
      • Certificaciones Cloud (Preparación)
      • Plataforma Cloud GCP

    Platzi y comunidad

    • Platzi Business
    • Live Classes
    • Lanzamientos
    • Executive Program
    • Trabaja con nosotros
    • Podcast

    Recursos

    • Manual de Marca

    Soporte

    • Preguntas Frecuentes
    • Contáctanos

    Legal

    • Términos y Condiciones
    • Privacidad
    • Tyc promociones
    Reconocimientos
    Reconocimientos
    Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
    Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
    Logo reconocimientoPrimera Startup EdTech · 2018
    Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
    Logo reconocimientoCEO Mejor Emprendedor del año · 2024
    De LATAM conpara el mundo
    YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads