CursosEmpresasBlogLiveConfPrecios

Tu primer test

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

    Viendo ahora

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

    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
    • SANDRO SIMON

      SANDRO SIMON

      student•
      hace 4 años

      Respecto de la salida de pantalla:

      Test Suites: 2 passed, 2 total Tests: 4 passed, 4 total

      Cada archivo sería un test suite. En este caso 02-math.test y 01-sum.test.

      Jehú Frayle

      Jehú Frayle

      student•
      hace 3 años

      Probando un conversor de segundos


      ☕ Actualmente, en la universidad estoy llevando Java básico, y uno de los primeros ejercicios consistía en hacer un conversor de segundos a horas, minutos y segundos.

      Me hubiera venido muy bien saber de test en ese momento, porque era muy tedioso tener que revisarlo manualmente para saber si estaba correcto.

      En fin, lo que hice fue replicar el ejercicio, ahora en JavaScript e implementar un test sencillito.

      function secondsConverter(seconds) { const hours = Math.floor(seconds/3600); const minutes = Math.floor((seconds%3600)/60); const residue = (seconds%3600)%60 return (`${hours}:${minutes}:${residue}`); }

      Y en el test simplemente le paso los ejemplos que ya sé que respuesta deben devolver.

      test('Converts seconds to hours, minutes and seconds', ()=>{ const rta = secondsConverter(3600); expect(rta).toBe('1:0:0'); const rta2 = secondsConverter(3700); expect(rta2).toBe('1:1:40'); const rta3 = secondsConverter(0); expect(rta3).toBe('0:0:0'); })

      Es curioso porque incluso en este desarrollo de 5 minutos me ayudó, pues yo erróneamente asumí que el la respuesta tendría un formato 'HH:MM:SS' que yo nunca le indique, y el test me hizo darme cuenta de mi error cuando lo corrí por primera vez 😅.

      Andrés Esteban Rodríguez Jiménez

      Andrés Esteban Rodríguez Jiménez

      student•
      hace 3 años

      Tu primer test

      Vamos a experimentar un poco con Jest, vamos a crear varias funciones matemáticas y vamos a hacer sus respectivos test.

      Creemos entonces un archivo math.js

      // Función para sumar function sum(a, b) { return a + b; } // Función para multiplicar function multiply(a, b) { return a * b; } // Función para dividir function divide(a, b) { return a / b; } // Exportamos nuestras funciones como paquetes module.exports = { sum, multiply, divide }

      Ya que tenemos nuestro archivo preparado, vamos entonces a crear nuestro archivo de test para empezar a familiarizarnos con la herramienta.

      Vamos a crear nuestro archivo math.test.js:

      // Exportar funciiones creadas const {sum, multiply, divide} = require('./math'); /* Para empezar a testear nuestras funciones debemos usar la palabra reservada test como función */ /* Dentro de esta función vamos a escribir como string que es lo que esperamos que haga esta función, ósea es una pequeña descripción de lo que se supone debe hacer la función */ /* Luego de esto vamos a tener una fución que será el manejador del test, en esta estableceremos la lógica de nuestro test */ test("añadir 1 + 3 debe dar 4", ()=> { // Ejecutamos nuestra función y le pasamos sus respectivos valores const rta = sum(1,3); /* Expect tendrá la ejecución de la función y toBe tendrá el resultado que esperamos de la función */ expect(rta).toBe(4); });

      Ahora si ejecutamos nuestro comando de test veremos que tenemos un resultado correcto:

      npm run test # Output = test passed

      Vamos a crear los test de las siguientes funciones:

      const {sum, multiply, divide} = require('./math'); test("añadir 1 + 3 debe dar 4", ()=> { const rta = sum(1,3); expect(rta).toBe(4); }); test("añadir 9 x 2 debe dar 18", ()=> { const rta = multiply(9,2); expect(rta).toBe(18); }); test("añadir 12 / 3 debe dar 4", ()=> { const rta = divide(12,3); expect(rta).toBe(4); // Podemos tener varios escenarios de prueba en nuestros test const rta2 = divide(5,2); expect(rta2).toBe(2.5); });

      Podemos también aumetar la complejidad de nuestros test:

      ... test( 'dividir entre 0 nos debe retornar un string que diga "no se puede dividir entre 0"', ()=> { const rta = divide(0,0); expect(rta).toBe("no se puede dividir entre 0"); } );

      Vamos a crear una validación para solucionar este problema:

      ... function divide(a, b) { if(a === 0 || b === 0) { return "no se puede dividir entre 0" } return a / b; }

      Así es como podemos crear nuestras pruebas para nuestros proyectos.

      Edgar Mauricio Pérez Rojas

      Edgar Mauricio Pérez Rojas

      student•
      hace 4 años

      Hola , me salté para ser el primer comentario, ya que es el primer test :

      < console.log( Hola Mundo del Testing); >

      no paremos de aprender. :D

      Dany R

      Dany R

      student•
      hace 3 años

      ¿cuando usar "import" y cuando "require"?

        Alvaro Eduardo Garzón Pira

        Alvaro Eduardo Garzón Pira

        student•
        hace 3 años

        Hola Dany, originalmente node.js solo aceptaba importación común con require, pero desde unos años atrás se admite también el uso de import debido a que JS realiza importaciones así, es decir, import proviene del lenguaje y request del entorno de ejecución por lado del servidor conocimido como node.js, no puedes usar los dos dentro del mismo proyecto debido a que se debe de configurar en el archivo package.json, muchas personas recomiendan usar solo import para dejarlo como estandar con JS por lado del backend y frontend pero puede variar en cada proyecto.

      JUAN JOSE HERNANDEZ MUÑOZ

      JUAN JOSE HERNANDEZ MUÑOZ

      student•
      hace 2 años

      Cualquier test consiste de tres simples pasos: Arrange, Act y Assert. (Configuracion, Accion y Verificacion).

      https://medium.com/swlh/aaa-the-bread-and-butter-of-testing-b31d99c30aca

      Irving Juárez

      Irving Juárez

      student•
      hace 4 años

      Que es mas recomendado, hacer un toBe(null) o un toBeNull(), y hay alguna diferencia entre ellos?

      Carlos Andrés Moreno Jimenez

      Carlos Andrés Moreno Jimenez

      student•
      hace 2 años
      Miguel Angel Reyes Moreno

      Miguel Angel Reyes Moreno

      student•
      hace 3 años

      No es mucho, pero es trabajo honesto:

      function sum(a, b) { return a + b; } function multiply(a, b) { return a * b; } function divide(a, b) { if (b === 0) { return null; } return a / b; } function substract(a, b) { return a - b; } function power(a, b) { return Math.pow(a, b); } module.exports = { sum, multiply, divide, substract, power };

      const { sum, divide, multiply, substract, power } = require('./02-math') test('sum of 1 + 3 should be 4', () => { const rta = sum(1, 3); expect(rta).toBe(4); }); test('substract 0 - 0 should be 0', () => { const rta = substract(0, 0); expect(rta).toBe(0); }) test('mutiply 3 * 5 should be 15', () => { const rta = multiply(3, 5); expect(rta).toBe(15); }); test('should divide', () => { const rta = divide(6, 3); expect(rta).toBe(2); const rta2 = divide(5, 2); expect(rta2).toBe(2.5); }) test('should divide by 0', () => { const rta = divide(6, 0); expect(rta).toBe(null); const rta2 = divide(5, 0); expect(rta2).toBe(null); }) test('should return the power of the base number', () => { const rta = power(2, 3); expect(rta).toBe(8); });
      Gilbert Ardila

      Gilbert Ardila

      student•
      hace 3 años

      //imput.js

      <function input(content){ if(typeof(content)!==String ||content.includes('@') || content.includes('#') || content.includes('/') || content.includes('-')){ return 'Error' } return 'Exito' } module.exports =input>

      //input.test.js

      <const input=require('./input'); test('this input must be wrong, it is not a string',()=>{ expect(input(1)).toBe('Error'); }); test('this input must be wrong, it contains special caracters',()=>{ expect(input('j@iro')).toBe('Error'); });>
      Juan José Mamani Tarqui

      Juan José Mamani Tarqui

      student•
      hace 2 años

      por qué usar testing si al programar la consola editor te manda error si es que anda algo mal sin tener que implementar jest ...

        Ariel Ezequiel Biazzo Genua

        Ariel Ezequiel Biazzo Genua

        student•
        hace 2 años

        Porque el testing nos permite modularizar y encontrar los errores. Si haces un programa con mas de 4 archivos y miles de linea de codigo sin test, no es tan facil encontrar los errores o bugs. Ademas, testing nos permite lanzar un error si no nos da la salida que esperamos, en cambio la termninal nos lanza un error solo si hay typos o algo siimilar.

      Amanda Sierra

      Amanda Sierra

      student•
      hace 4 años

      esto es correcto? porque no me marca error en las pruebas pero yo no le di return null cuando definí la función

      const rta3 = divide(5, 0); expect(rta3).toBeNull;

      Fredy Arias

      Fredy Arias

      student•
      hace 3 años

      Es buena práctica tener más de un expect en un test?

        Nicolas Molina

        Nicolas Molina

        teacher•
        hace 3 años

        Hola, no es no mala ni buena práctica, depende de que quieras probar, puede que en una sola prueba quieras validar varios expects que hagan sentido tenerlos todo dentro.

      Kevin Franco

      Kevin Franco

      student•
      hace 10 meses

      quise calcular el teomera de pitagoras:

      function calculatePitagorasTheorem(value1 = 0, value2 = 0) { const squaredSum = Math.pow(value1, 2) + Math.pow(value2, 2); const squareRoot = Math.sqrt(squaredSum); return squareRoot; } module.exports = calculatePitagorasTheorem;

      test:

      const calculatePitagorasTheorem = require('./03-self'); test('calculatePitagoras', () => { const angles = calculatePitagorasTheorem(3, 4); expect(angles).toBe(5); }); ```y funciono perfecto, que emoción
      Kevin Franco

      Kevin Franco

      student•
      hace 10 meses

      El uso de expect y toBe es fundamental en las pruebas unitarias de JavaScript, especialmente con bibliotecas como Jest. expect es una función que se utiliza para crear una expectativa sobre un valor, y toBe es un matcher que verifica si el valor esperado es exactamente igual al valor actual mediante comparación estricta (===).

      Por ejemplo:

      expect(valor).toBe(valorEsperado);

      Esto asegura que los resultados de tu código sean los esperados, ayudando así a detectar fallos en tu lógica.

      William Zapata

      William Zapata

      student•
      hace 2 años

      RETO

      Elevar un número a una potencia

      function raiseExponent(base, exponent) {  return base ** exponent;}

      Test

      test("raiseExponent", () => {  const rta = raiseExponent(2, 3);  expect(rta).toBe(8);  const rta2 = raiseExponent(1, 0);  expect(rta2).toBe(1);});

      Sergio Alejandro Valencia López

      Sergio Alejandro Valencia López

      student•
      hace 2 años

      En visual code podemos instalar un plugin para correr la prueba de forma rapida sobre el mismo codigo, se llama “Jest Runner”

      Javier Rosario Rovero

      Javier Rosario Rovero

      student•
      hace 3 años
      > demos@1.0.0 test2 > jest PASS src/01-sum.test.js PASS src/02-math.test.js Test Suites: 2 passed, 2 total Tests: 8 passed, 8 total Snapshots: 0 total Time: 1.98 s, estimated 2 s Ran all test suites.
      Carlos S. Aldazosa

      Carlos S. Aldazosa

      student•
      hace 3 años

      Mi ejemplo de test con una función que retorna el promedio de un array:

      Función

      function average(numbers) { if (numbers.length === 0) { return 'Array can not be empty'; } const sum = numbers.reduce((previous, current) => { return previous + current }) return sum/numbers.length; }

      Test

      test('Average', async () => { const res = average([1,2,3,4,5]); expect(res).toBe(3); }); test('Average error', async () => { const res = average([]); expect(res).toBe('Array can not be empty'); });
      Sebastian Pedroza

      Sebastian Pedroza

      student•
      hace 3 años

      🤓Tu primer test

      1. Crear el archivo JS que contenga el código a evaluar
      function sum(a, b) { return a + b; } function multiply(a, b) { return a * b; } function divide(a, b) { if (b === 0) { return null; } return a / b; } module.exports = { sum, multiply, divide, };

      2)Crear el archivo de pruebas para el código a evaluar

      const { sum, multiply, divide } = require('./02-math'); // Importar el archivo JS a evaluar //test = Define la pueba a hacer test ("Descripción de la prueba", ()=>{ //Ejecución de la prueba en el código /*expect= Define y compara que el resultado esperado a partir de la pueba realizada sea igual al obtenido espues de la ejecución*/ expect(/*Resultado de la ejecución*/).toBe(/*Resultado de la prueba*/); }); test("add 1 + 3 should be 4", () => { const rta = sum(1, 3); expect(rta).toBe(4); }); test("add 1 * 4 should be 4", () => { const rta = multiply(1, 4); expect(rta).toBe(4); }); test("add 1 / 4 should be 4", () => { const rta = divide(6, 3); expect(rta).toBe(2); const rta2 = divide(5, 2); expect(rta2).toBe(2.5); }); test("should divide for zero", () => { const rta = divide(6, 0); expect(rta).toBeNull(); const rta2 = divide(5, 0); expect(rta2).toBeNull(); });
      1. Ejecutar las pruebas con npm run test

    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