CursosEmpresasBlogLiveConfPrecios

Assertions / matchers

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

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

    Viendo ahora
  • 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

    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

    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 examen

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

      Comentarios

        Edgar Mauricio Pérez Rojas

        Edgar Mauricio Pérez Rojas

        student•
        hace 4 años

        Código comentado / Resumen +BONUS

        // matchers test('test obj', () => { const data = { name: 'Rigo' }; // Para testear objetos se usa .toEqual. data.lastname = 'Molina'; // Manipulación del objeto. expect(data).toEqual({ name: 'Rigo', lastname: 'Molina' }); // Espero que el objeto de arriba sea igual a este. }); test('null', () => { const data = null; expect(data).toBeNull(); // Un nulo está definido como nulo. expect(data).toBeDefined(); // Un definido es otro tipo de dato en JS. expect(data).not.toBeUndefined(); // Podemos usar negaciones. }); test('booleans', () => { // Booleanos directos. expect(true).toEqual(true); expect(false).toEqual(false); // Datos considerados como booleanos. expect(0).toBeFalsy(); expect('').toBeFalsy(); expect(false).toBeFalsy(); expect(1).toBeTruthy(); }); test('string', () => { // Podemos preguntar si coincide una parte arbitraria con la cadena. expect('Christoph').toMatch(/stop/); }); test('list / arrays', () => { const numbers = [1, 2, 3, 4]; // Podemos preguntar si contiene una parte arbitraria con el arreglo. expect(numbers).toContain(3); });
        • // // // BONUS // // //
        test('comparing numbers', () => { const value = 2 + 2; expect(value).toBeGreaterThan(3); // Es mayor a 3? expect(value).toBeGreaterThanOrEqual(3.5); // Es mayor o igual a 3.5? expect(value).toBeLessThan(5); // Es menor que 5? expect(value).toBeLessThanOrEqual(4.5); // Es menor o igual a 4.5? // ToBe y toEqual son equivalentes para números. expect(value).toBe(4); expect(value).toEqual(4); }); test('comparing float', () => { const value = 3.5 + 4.2; // Se usa toBeCloseTo para evitar errores por redondeos en numeros quebrados usando toEqual. expect(value).toBeCloseTo(7.7); }); function formComplete() { throw new Error('You are not completed the form'); } test('exception error', () => { // Probar si la función arroja error cuando se llama. expect(() => formComplete()).toThrow(); expect(() => formComplete()).toThrow(Error); // Podemos usar el texto del error o una parte. expect(() => formComplete()).toThrow('You are not completed the form'); expect(() => formComplete()).toThrow(/not completed/); });
        • UOT Terminal
         ~/.../testing-js/demos   master ●  npm run test > demos@1.0.0 test > jest PASS src/04-assertions.test.js PASS src/01-sum.test.js PASS src/02-math.test.js Test Suites: 3 passed, 3 total Tests: 14 passed, 14 total Snapshots: 0 total Time: 0.614 s, estimated 1 s Ran all test suites.
        Miguel Angel Reyes Moreno

        Miguel Angel Reyes Moreno

        student•
        hace 3 años

        Les quiero hacer a todos la vida más fácil:

        Hack para que VS Code autocomplete tu código de Jest: npm i -D @types/jest

        Lisbeth Quintero

        Lisbeth Quintero

        student•
        hace 3 años

        Assertions o afirmaciones, con los cuales se puede verificar el comportamiento del código, algunas de los assertions más comunes de Jest, son:

        1. expect: es la función principal de Jest y se utiliza para especificar la salida esperada de una función o valor. Por ejemplo: expect(2 + 2).toBe(4).
        2. toBe: compara dos valores usando el operador ===. Por ejemplo: expect(2 + 2).toBe(4).
        3. toEqual: compara dos valores recursivamente para verificar si son iguales. Por ejemplo: expect({ a: 1 }).toEqual({ a: 1 }).
        4. toMatch: comprueba si una cadena o expresión regular coincide con una cadena esperada. Por ejemplo: expect("Hello World").toMatch(/Hello/).
        5. toBeNull: comprueba si un valor es null. Por ejemplo: expect(null).toBeNull().
        6. toBeUndefined: comprueba si un valor es undefined. Por ejemplo: expect(undefined).toBeUndefined().
        7. toBeDefined: comprueba si un valor no es undefined. Por ejemplo: expect("Hello").toBeDefined().
        8. toBeTruthy: comprueba si un valor es verdadero. Por ejemplo: expect("Hello").toBeTruthy().
        9. toBeFalsy: comprueba si un valor es falso. Por ejemplo: expect("").toBeFalsy().
        10. toThrow: comprueba si una función lanza una excepción. Por ejemplo: expect(() => { throw new Error(); }).toThrow().
        Jimer Samuel Espinoza

        Jimer Samuel Espinoza

        student•
        hace 4 años

        Mi aporte de esta clase

        // marchers test('test obj', () => { const data = { name: 'Jimer' }; data.lastname = 'Espinoza'; expect(data).toEqual({ name: 'Jimer', lastname: 'Espinoza' }); }); test(' null', () => { const data = null; expect(data).toBeNull(); expect(data).toBeDefined(); expect(data).not.toBeUndefined(); }); test('booleans', () => { expect(true).toEqual(true); expect(false).toEqual(false); expect(0).toBeFalsy(); expect('').toBeFalsy(); expect(false).toBeFalsy(); }); test('string', () => { expect('Christoph').toMatch(/stop/); }); test('list / arrays', () => { const numbers = [1, 2, 3, 4]; expect(numbers).toContain(3); });
        Pablo Perez

        Pablo Perez

        student•
        hace 3 años

        Lista de Matchers:

        • toEqual: Compara si dos valores son iguales en contenido.
        • toBeNull: Verifica si un valor es nulo.
        • toBeDefined: Verifica si un valor está definido.
        • not.toBeUndefined: Verifica si un valor no es indefinido.
        • toBeTruthy: Verifica si un valor es verdadero.
        • not.toBeFalsy: Verifica si un valor no es falso.
        • toBeFalsy: Verifica si un valor es falso.
        • toMatch: Verifica si una cadena coincide con un patrón regular.
        • toContain: Verifica si un elemento está presente en un arreglo.
        Andrés Esteban Rodríguez Jiménez

        Andrés Esteban Rodríguez Jiménez

        student•
        hace 4 años

        Assertions / Matchers

        Los asserts / matches nos ayudan a verificar ciertos valores específicos.

        Veamos un poco acerca de estas utilidades:

        .toEqual({property:'value'});

        test('test obj', () => { const data = { name: 'andru' }; // Nos sirve para trabajar con objetos .toEqual({property:'value'}) data.lastname = 'rodríguez'; expect(data).toEqual({ name: 'andru', lastname: 'rodríguez' }); });

        Esperar valores null o undefined

        test('null', () => { const data = null; // El valor que espera es null expect(data).toBeNull(); // El valor que espera es undefined expect(undefined).toBeUndefined(); // El dato a retornar es definido como nulo expect(data).toBeDefined(); // El dato que espera NO es undefined expect(data).not.toBeUndefined(); });

        Esperar valores booleanos

        test('booleans', () => { // El valor que esperamos es un "true" expect(true).toEqual(true); // El valor que esperamos es un "false" expect(false).toEqual(false); // Recordemos que hay valores que se pueden interpretar como falsos expect(0).toBeFalsy(); expect('').toBeFalsy(); expect(false).toBeFalsy(); });

        Probar valores de strings

        test('string', () => { // Podemos hacer uso de expreciones regulares expect('Chirstoph').toMatch(/stop/); // ¿Contiene la palabra stop? });

        Validar datos de Arrays

        test('Arrays', () => { const numbers = [1, 2, 3, 4, 5]; // La lista debe contener el número 3 expect(numbers).toContain(3); });

        Chan chan!

        Helio Javier Soto Arevalo

        Helio Javier Soto Arevalo

        student•
        hace 4 años

        Se utiliza toEqual por que 2 objetos a pesar de ser exactamente iguales ocupan espacio y memoria diferentes y por eso no pasa el toBe

        jefred bedoya

        jefred bedoya

        student•
        hace un mes
        •
        editado

        El contenido de esta clase sobre Assertions y Matchers se resume en los siguientes pilares fundamentales para validar tu código:

        El propósito de la aserción

        Las aserciones son los jueces de tu test. Su función es comparar el resultado real obtenido contra el resultado esperado. Si la comparación falla, el test se detiene y reporta el error.

        Matchers: El lenguaje de validación

        Son las herramientas que definen qué estás probando exactamente.

        • Igualdad: toBe o toEqual para comparar valores primitivos u objetos.
        • Veracidad: toBeTruthy o toBeFalsy para validar estados booleanos.
        • Contención: toContain para verificar elementos dentro de arrays o strings.
        • Excepciones: toThrow para asegurar que tu código falla cuando debe fallar.

        Buenas prácticas

        • Especificidad: Usa el matcher más preciso posible para que, al fallar, el mensaje de error sea claro.
        • Legibilidad: El test debe leerse como una oración en inglés natural.
        • Un solo objetivo: Evita saturar un test con demasiadas aserciones; si una falla, las siguientes no se ejecutarán.
        Irving Juárez

        Irving Juárez

        student•
        hace 4 años

        En el apartado de "booleans", porque se usa toEqual si también se puede usar toBe, hay alguna razón en especifico?

          Cristian Blandon

          Cristian Blandon

          student•
          hace 3 años

          No

          Irving Juárez

          Irving Juárez

          student•
          hace 3 años

          Muy enriquecedor tu aporte @cristianblar

        Leandro Gavidia Santamaria

        Leandro Gavidia Santamaria

        student•
        hace 4 años

        Hola, ¿Es lo mismo utilizar .toBeDefined y .not.toBeUndefined? En un primer análisis parece que sí.

          Cristian Blandon

          Cristian Blandon

          student•
          hace 3 años

          Si

        Joel alexander

        Joel alexander

        student•
        hace 4 años

        No existe una herramienta para utlizar el intellisense??

          Nicolas Molina

          Nicolas Molina

          teacher•
          hace 4 años

          Hola ya VSCode viene con intellisense entonces no se a que te refieres puntualmente, también hay unos plugins para jest si te refieres a autocompletar código o algo de este estilo. 🙂

        Manuel Roa Ojeda

        Manuel Roa Ojeda

        student•
        hace 3 años

        https://jestjs.io/docs/using-matchers

        Uriel Solis Salinas

        Uriel Solis Salinas

        student•
        hace 3 años

        Assertions / matchers

        . En programación, los “assertions” o “matchers” se refiere a una técnica para verificar que el comportamiento de un programa cumpla con ciertas condiciones o expectativas. . Testing con objetos

        test('test obj', () => { const data = { name: 'nico' }; data.lastname = 'molina'; // Manipulación del objeto. expect(data).toEqual({ name: 'nico', lastname: 'molina' }); // toEqual se utiliza para preguntar por objetos. });

        Testing con valor null

        test('null', () => { const data = null; expect(data).toBeNull(); // toBeNull se usa cuando esperamos que un valor sea null. expect(data).toBeDefined(); // toBeDefined se usa cuando esperamos que el valor sea definido. expect(data).not.toBeUndefined(); // se usa cuando esperamos que un valor no es undefined. });

        Testing con booleanos

        // Testing con Booleanos test('booleans', () => { expect(true).toEqual(true); // toEqual igual se usa para los booleanos. expect(false).toEqual(false); // toBeFalsy se usa para valores que esperamos que son false. expect(0).toBeFalsy(); expect('').toBeFalsy(); expect(false).toBeFalsy(); });

        Testing con strings

        test('strings', () => { /* toMatch es una función que puede verificar si el string esperado tiene alguna coincidencia, por ejemplo 'ire' ya que forma parte del string */ expect('Uriel').toMatch(/rie/); // se le agrega una expresión regular como parámetro a toMatch. });

        Testing con listas o arrays

        test('list / arrays', () => { const nums = [1, 2, 3, 4]; /* toContain sirve para verificar que el array contenga el elemento. */ expect(nums).toContain(3); });