CursosEmpresasBlogLiveConfPrecios

Mocking, Stub, doubles

Clase 17 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

    Viendo ahora
  • 18
    Mocking

    Mocking

    09:43 min
  • 19
    Spies

    Spies

    11:36 min
  • 20
    Generando Fake Books

    Generando Fake Books

    12:19 min

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 el examen del curso
    • Edgar Mauricio Pérez Rojas

      Edgar Mauricio Pérez Rojas

      student•
      hace 4 años

      Resumen Doubles

      • Dummy: Son datos ficticios para llenar información.

      • Fake: Son objetos que simulan comportamientos o datos; como un usuario ficticio.

      • Stubs: Son proveedores o APIs de tatos preparados (BD Clima).

      • Spies: Son como los stubs, pero se dejan espiar su comportamiento, comunicación e invocación.

      • Mocks: Stubs + Spies, pueden estar pre-programados para enviar las respuestas supuestas.

        Reinaldo Mendoza

        Reinaldo Mendoza

        student•
        hace 3 años

        Gracias por el resumen

        Ronaldo Delgado

        Ronaldo Delgado

        student•
        hace 2 años

        Gracias por el resumen!

      Andrés Pérez Díaz

      Andrés Pérez Díaz

      student•
      hace 3 años

      Yo hice el código tal cual como el profesor y a mí sí me conecto a la DB y me trajo los datos de los dos libros. Milagro!!! jajaja

        Miguel Angel Hernandez Colombo

        Miguel Angel Hernandez Colombo

        student•
        hace 3 años

        a mi no me conecto!

        <$ docker-compose up -d mongo error during connect: this error may indicate that the docker daemon is not running: Get "htt://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dapi%22%3Atrue%7D%7D": open //./pipe/docker_engine: The system cannot find the file specified. >
        Alvaro Eduardo Garzón Pira

        Alvaro Eduardo Garzón Pira

        student•
        hace 3 años

        Buen día a los dos

        1. Andrés lamento usar tu comentario para responderle a Miguel
        2. Miguel, muy posiblemente es que estás teniendo un error al subir la instancia de docker en la que pueda estar implicado una mala instalación de docker, ¿Podrías revisar el archivo log de docker? Si quieres usa la siguiente guía para tener una idea de donde encontrar el log: Docker log También, ¿Cómo tienes instalado docker? WSL, Windows, Mac, etc. En mi caso, yo lo tengo instalado en Windows pero puede usar WSL2 para un mayor rendimiento, antes de hacer uso de docker, lo que hago es abrir el docker desktop y así sube el demonio o el proceso en segundo plano que me habilita docker:
          Platzi.png
      Ameth Ordoñez Erazo

      Ameth Ordoñez Erazo

      student•
      hace 3 años

      NOTA MENTAL: 💆‍♂️

      Los Mocks es un tipo de prueba que consisten en crear objetos falsos que sustituyan a los objetos reales y de esta manera poder probar un determinado requerimiento. El objetivo de utilizar objetos fake en lugar de reales, es romper las dependencias con otros objetos y de esta manera probar requerimientos de manera independiente. Estos objetos se usan para probar que se realizan correctamente llamadas a otros métodos, por ejemplo, a una web API, y poder validar el comportamiento del componente al obtener una respuesta de parte de esa API.

      Dany Ruddy Huayhua Huayhua

      Dany Ruddy Huayhua Huayhua

      student•
      hace 2 años

      Solo para destacar el comportamiento de docker. Una vez que docker se reinicia no guarda la información cargada en la bd, los libros de ejemplo que creamos se guardaron pero desaparecieron al levantar nuevamente el contenedor.

      En esta clase efectivamente el profesor se conectó a la bd pero retornó un array sin elementos. El error se produjo debido a que un array vacío no tiene una longitud de 2.

      Para quien está interesado en tener un contenedor con persistencia de datos se utiliza volumenes que son referencias a espacios de memoria fuera del contenedor donde le decimos a docker que guarde la información durante el uso del contedor.

      [https://docs.docker.com/storage/volumes/]\(url)

      Willie David Roa Hidalgo

      Willie David Roa Hidalgo

      student•
      hace 2 años

      Según chatGPT; Los doubles se utilizan en el contexto de pruebas unitarias y de integración para simular ciertos comportamientos o dependencias. Aquí hay una explicación de cada uno:

      1. Dummy (Falso):

        • Un Dummy es un objeto que se pasa como argumento a una función o método durante una prueba, pero que no se utiliza en absoluto en la lógica de la prueba. Es simplemente un marcador de posición para satisfacer los requisitos de la firma del método o función. Por ejemplo, si tienes una función que toma dos parámetros pero solo necesitas probar el comportamiento de uno de ellos, puedes pasar un Dummy como segundo parámetro.

        Ejemplo: Supongamos que estás probando una función calculateTotal que toma dos parámetros: subtotal y impuesto. Si solo quieres probar cómo se calcula el total sin preocuparte por el impuesto, podrías pasar un Dummy como segundo parámetro: calculateTotal(100, dummy).

      2. Fake (Falso):

        • Un Fake es una implementación simplificada de una dependencia real que se utiliza en las pruebas. A diferencia de un Dummy, un Fake tiene una implementación funcional pero más simple. Por ejemplo, si necesitas simular una base de datos para tus pruebas, podrías usar una implementación en memoria en lugar de una base de datos completa.

        Ejemplo: En lugar de usar una base de datos real, podrías crear una clase FakeDatabase que simplemente almacene los datos en un diccionario en memoria. Esta implementación simplificada sería suficiente para las pruebas sin tener que depender de una base de datos real.

      3. Stub (Tapa):

        • Un Stub es un objeto que proporciona respuestas predefinidas a llamadas de métodos o funciones durante una prueba. Se utiliza para simular el comportamiento de dependencias reales de manera estática y predefinida. Por ejemplo, podrías tener un Stub de un servicio de correo electrónico que siempre devuelva "éxito" sin realmente enviar un correo electrónico.

        Ejemplo: Supongamos que estás probando una función que envía correos electrónicos. En lugar de enviar correos electrónicos reales durante la prueba, podrías usar un Stub que simule el comportamiento del servicio de correo electrónico y devuelva "éxito" inmediatamente sin enviar realmente el correo electrónico.

      4. Spy (Espía):

        • Un Spy es un objeto que registra información sobre llamadas a métodos o funciones durante una prueba. Permite verificar cómo se llamaron realmente los métodos o funciones y qué parámetros se pasaron. Por ejemplo, podrías usar un Spy para registrar llamadas a un servicio de registro durante una prueba y luego verificar si se llamó correctamente y con los parámetros adecuados.

        Ejemplo: Supongamos que estás probando una función que llama a un servicio de registro. Puedes usar un Spy para registrar llamadas al servicio de registro durante la prueba y luego verificar si se llamó correctamente con los parámetros esperados.

      5. Mock (Simulacro):

        • Un Mock es similar a un Stub, pero además de proporcionar respuestas predefinidas, también verifica que las llamadas se realicen según lo esperado. Es decir, un Mock tiene expectativas sobre las llamadas que recibirá durante la prueba y verifica que se cumplan. Por ejemplo, podrías usar un Mock para simular el comportamiento de una dependencia y verificar que se llame con los parámetros correctos.

        Ejemplo: Supongamos que estás probando una función que llama a un servicio de autenticación. Puedes usar un Mock para simular el servicio de autenticación y especificar expectativas sobre cómo debe llamarse durante la prueba. Luego, puedes verificar que se llamó correctamente con los parámetros esperados.

      Iván Antonio Bustos Calderón

      Iván Antonio Bustos Calderón

      student•
      hace 3 años

      Creo que la dificultad del testing está justamente en esta clase. Los mocks. En el frontend esto se hace algo complejo de testear.

        Reinaldo Mendoza

        Reinaldo Mendoza

        student•
        hace 3 años

        Esto es lo que los complica pero, es cuestión de entender que es una caja negra lo que simulas, entonces al final, evitas probar lo que no tienes que probar y dedicarte al test que te interesa

      Alberto Alonso Acevedo

      Alberto Alonso Acevedo

      student•
      hace 4 años

      Buenos días, no entiendo porque cuando trato de ejecutar el comando 'run test' a pesar que tengo la misma sintaxis que en el video me salta un error donde dice que debo tener al menos un test en el describe. Alguien podría ayudarme?

        David Barrera

        David Barrera

        student•
        hace 3 años

        Comparte el código y el error por favor!

        Alvaro Eduardo Garzón Pira

        Alvaro Eduardo Garzón Pira

        student•
        hace 3 años

        Hola Alberto, ¿Qué terminal usabas? Te recomendaría hacer uso de una basada en linux como Cmder, WSL o Bash

      David Trespalacios

      David Trespalacios

      student•
      hace 3 años

      Hasta esta clase, no veo la utilidad de hacer pruebas al código con data simulada, a sabiendas que van a pasar las pruebas... sigamos adelante a ver que pasa.

        Ariel Ezequiel Biazzo Genua

        Ariel Ezequiel Biazzo Genua

        student•
        hace 2 años

        Claro, pero si por ejemplo estas testeando un algoritmo complejo, en ese caso, utilizaras data simulada y muchas instrucciones que querras comprobar que tan bien se realizaron.

      Ronaldo Delgado

      Ronaldo Delgado

      student•
      hace 2 años

      me quedare con los Mocks

      Jonathan Ardila

      Jonathan Ardila

      student•
      hace 2 años

      Mocking, Stub, doubles

      Doubles

      Dummy: Son datos ficticios y se usan para rellenar información.

      Fake: Simulan un objeto real y sirven para suplantar ciertos datos y comportamientos.

      Stubs: Proveen respuestas preparadas y se pueden llamar durante el test para simular un comportamiento.

      Spies: Pueden ser Stub pero puedo recolectar información de como fue llamado.

      Mocks: Stub + Spies, a veces pueden ya estar pre-programados.

      Carlos Rodríguez

      Carlos Rodríguez

      student•
      hace 3 años

      Este es el punto donde se considera que el patrón de diseño Singleton es un antipatrón, ya que si queremos es un conjunto de test crear una instancia por cada test no podremos hacerlo por la naturaleza creacional de ese patrón!

    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