CursosEmpresasBlogLiveConfPrecios

Generando Fake Books

Clase 20 de 27 • Curso de Introducción al Testing con JavaScript

Clase anteriorSiguiente clase

Contenido del curso

Introduccion

  • 1
    ¿Qué es el testing?

    ¿Qué es el testing?

    09:31 min
  • 2
    La piramide del testing

    La piramide del testing

    07:46 min
  • 3
    Hablemos sobre deuda técnica

    Hablemos sobre deuda técnica

    06:48 min
  • 4
    Herramientas de testing

    Herramientas de testing

    07:54 min
  • 5
    Creando el proyecto

    Creando el proyecto

    08:15 min
  • 6
    Tu primer test

    Tu primer test

    09:15 min

Escribiendo pruebas

  • 7
    Pruebas estáticas

    Pruebas estáticas

    11:44 min
  • 8
    Assertions / matchers

    Assertions / matchers

    10:10 min
  • 9
    Setup and Teardown

    Setup and Teardown

    11:31 min
  • 10
    Implementado Setup

    Implementado Setup

    12:00 min
  • 11
    Tipos de pruebas

    Tipos de pruebas

    13:34 min
  • 12
    Metodologías

    Metodologías

    13:59 min

Pruebas Unitarias

  • 13
    Pruebas unitarias

    Pruebas unitarias

    06:32 min
  • 14
    Coverage report

    Coverage report

    08:06 min
  • 15

    Instalación de Docker en Windows, macOS y Ubuntu

    01:35 min
  • 16
    Proyecto de API

    Proyecto de API

    11:48 min
  • 17
    Mocking, Stub, doubles

    Mocking, Stub, doubles

    14:08 min
  • 18
    Mocking

    Mocking

    09:43 min
  • 19
    Spies

    Spies

    11:36 min
  • 20
    Generando Fake Books

    Generando Fake Books

    Viendo ahora

Integration Test & E2E

  • 21
    Configurando supertest en el API

    Configurando supertest en el API

    16:29 min
  • 22
    Integration Test

    Integration Test

    09:44 min
  • 23
    e2e

    e2e

    20:40 min

UI Test

  • 24
    UI Test

    UI Test

    10:02 min

Automatizar

  • 25
    Unit tests en GitHubActions

    Unit tests en GitHubActions

    13:49 min
  • 26
    E2E en GitHubActions

    E2E en GitHubActions

    08:02 min
  • 27
    ¿Quieres más cursos de testing?

    ¿Quieres más cursos de testing?

    01:51 min
Tomar examen
    Edgar Mauricio Pérez Rojas

    Edgar Mauricio Pérez Rojas

    student•
    hace 4 años

    Código Comentado

    • Instalando la librería fakejs.dev
     ~/.../testing-js/api   master ●  npm install @faker-js/faker --save-dev
    • Agregando la regla a /testing-js/api/.eslintrc.js
    rules: { 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], },
    • Configurando los parámetros deseados para nuestros casos.
    const { faker } = require('@faker-js/faker'); const generateOneBook = () => ({ _id: faker.datatype.uuid(), name: faker.commerce.productName(), price: faker.commerce.price(), }); const generateManyBook = (size) => { const limit = size ?? 10; // Si no me envian el tamaño genero 10 libros. const fakeBooks = []; // Colocando los fakeBooks generados. for (let index = 0; index < limit; index += 1) { fakeBooks.push(generateOneBook()); } return [...fakeBooks]; }; module.exports = { generateOneBook, generateManyBook };
    • Agregando la librería a los tests en /testing-js/api/src/services/books.service.test.js
    const { generateManyBook } = require('../fakes/book.fake'); const BooksService = require('./books.service'); // Data de relleno preparada. // Esta responsabilidad pasa a la librería fakejs.dev y se llama en el test unitario. /* const fakeBooks = [ { _id: 1, name: 'Harry Potter 2', }, ]; */ // Para hacer pruebas de comportamiento se usa jest.fn(). // se cambia el nombre de spy a Mock para que el jest lo interprete bien. const mockGetAll = jest.fn(); // Suplantación de la BD. jest.mock('../lib/mongo.lib', () => jest.fn().mockImplementation(() => ({ // Metodos a suplantar. getAll: mockGetAll, // Directo, sin fake y sin => function. // getAll: () => [...fakeBooks], // "data enlatada" create: () => {}, }))); describe('Test for BooksService', () => { let service; beforeEach(() => { service = new BooksService(); // Limpiar los Mocks antes de cada caso para no dejar relleno del anterior. jest.clearAllMocks(); }); describe('test for getBooks', () => { test('should return a list book', async () => { // Arrange const fakeBooks = generateManyBook(20); mockGetAll.mockResolvedValue(fakeBooks); // Act const books = await service.getBooks({}); console.log(books); // Assert expect(books.length).toEqual(fakeBooks.length); // Espiando expect(mockGetAll).toHaveBeenCalled(); // Para saber si fué llamado expect(mockGetAll).toHaveBeenCalledTimes(1); // cuantas veces es llamado expect(mockGetAll).toHaveBeenCalledWith('books', {}); // Con qué argumentos fué llamado. }); test('should return a list book', async () => { // Arrange const fakeBooks = generateManyBook(4); mockGetAll.mockResolvedValue(fakeBooks); /* [{ _id: 1, name: 'Harry Potter 3', }]); */ // Act const books = await service.getBooks(); console.log(books); // Assert expect(books[0].name).toEqual(fakeBooks[0].name); }); }); });

    Nota: Empecé con Harri Potter 2

      Ronaldo Delgado

      Ronaldo Delgado

      student•
      hace 2 años

      Genial!

    Angel Hernandez

    Angel Hernandez

    student•
    hace 4 años

    Consejo super pro, siempre lean la documentacion de las API's, algunas veces pueden deprecar la forma en la que se consume la data de la API, aparte que leer la documentacion ayuda mucho en el mundo real.

    Carlos Nicolas Gonzalez Cabrera

    Carlos Nicolas Gonzalez Cabrera

    student•
    hace 2 años

    En lugar de poner "_id: faker.datatype.uuid()," se recomienda poner "_id: faker.string.uuid()," ya que en su nueva versión esto estara deprecado, les avisara en consola de todas maneras.

    Miguel Angel Reyes Moreno

    Miguel Angel Reyes Moreno

    student•
    hace 3 años

    Me encanta las buenas prácticas y la organización de Nico en su código, se nota que tiene muchísima experiencia

    Irving Juárez

    Irving Juárez

    student•
    hace 3 años

    Esta manera de crear los fake books me parece mejor, donde getSingleBook es la funcion createOneBook

    const getBooks = (size = 10) => { const books = new Array(size) .fill({}) .map(_book => getSingleBook()) return books }
    Wilson Bienvenido Otaño Mateo

    Wilson Bienvenido Otaño Mateo

    student•
    hace un año

    Por si hay alguien nuevo, actualmente la forma de hacer los uuid es

    id: faker.string.uuid() ```en lugar de usar ```js faker.datatype.uuid()
    Roberto Contrera

    Roberto Contrera

    student•
    hace 3 años

    ¿Por qué utiliza doble () => () => {...}? No llega a lo mismo con uno que sería () => {...}

    Johnner Alexander Gambacica Ortiz

    Johnner Alexander Gambacica Ortiz

    student•
    hace 3 años

    Excelente clase, y herramientas. Ahora me siento super bien con unit testing, jest y faker.js =)

    Cesar Buelvas Torres

    Cesar Buelvas Torres

    student•
    hace 3 años

    Con lo que pasó con faker, ahora uso falso. https://github.com/ngneat/falso

    npm i @ngneat/falso --save-dev

    Es mas o menos los mismo, para pruebas y migraciones está bien.

    Brandon Argel Verdeja Domínguez

    Brandon Argel Verdeja Domínguez

    student•
    hace un mes

    Además del cambio por faker.string.uuid(), si instalan la última versión de@faker-js/faker (de la versión 10 en adelante), ésta ya no soporta CJS, solo ESM. Por lo que hay dos opciones para solucionarlo:

    1. Hacer un downgrade a la versión 9: npm i -D @faker-js/faker@9 y seguir trabajando con CJS.
    2. Hacer refactor para pasar a ESM (Recomendable para proyectos nuevos).
      1. Agregar "type": "module" al package.json
      2. Cambiar todos los require(...) por import ... from ...
      3. Cambiar module.exports por export
      4. Y otros posibles detalles extra para que funcione correctamente el proyecto
    Ronald Amiquero Zoiqui

    Ronald Amiquero Zoiqui

    student•
    hace 4 años

    Una consulta: ¿Cuál es la diferencia entre datos fakes y datos Dummy?

      Agustina Corvo

      Agustina Corvo

      student•
      hace un año

      Son parecidos ya que ambos son datos falsos que se crean al generar pruebas. La diferencia es que la idea de un dato fake es que sea lo más cercano posible al mundo real y un dummy no.

    Anthony Hernando Rivera Escobar

    Anthony Hernando Rivera Escobar

    student•
    hace 9 meses

    Si estas llevando este curso en el 2025 cambia uui por esto :   _id: faker.string.uuid(),

    Agustina Corvo

    Agustina Corvo

    student•
    hace un año

    Si se fijan en la documentación de la API además de que datatype.uuid() ahora es string.uuid(), se puede usar book.title() en vez de commerce.productName() para que tengan más sentido los datos fake.

    jesus manuel vergara arias

    jesus manuel vergara arias

    student•
    hace un año

    La única manera en la que me funcionó el mocking data de faker para el id fue con string:

    const generateOneCothe = () => { return { _id: faker.string.uuid(), product: faker.commerce.productName(), price: faker.commerce.price(), brand: faker.commerce.productAdjective(), }; }; const generateCothes = (count) => { const limit = count || 10; const result = []; for (let i = 0; i < limit; i++) { result.push(generateOneCothe()); } return [...result]; }; ```const generateOneCothe = () => { return { \_id: faker.string.uuid(), product: faker.commerce.productName(), price: faker.commerce.price(), brand: faker.commerce.productAdjective(), };}; const generateCothes = (count) => { const limit = count || 10; const result = \[]; for (let i = 0; i < limit; i++) { result.push(generateOneCothe()); } return \[...result];};
    Camilo Alvarez Avila

    Camilo Alvarez Avila

    student•
    hace 2 años

    Me estaba generando error cuando le decia :   _id: faker.datatype.uuid(),

    Entonces lo cambie por :   _id: faker.string.uuid(),

    Entendí que era porque 'faker.datatype.uuid' ya esta deprecado

    Ronaldo Delgado

    Ronaldo Delgado

    student•
    hace 2 años

    increíble esta herramienta, es muy útil!

    Beto Toro

    Beto Toro

    student•
    hace 3 años

    El autro de esta librería se puso un poco loco y daño apropósito la librería como forma de protesta. Así que no les recomiendo utilizar Faker.js. Busquen la historia en google que se van a sorprender con tremenda novela.

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