CursosEmpresasBlogLiveConfPrecios

Implementando pruebas a promesas

Clase 5 de 16 • Curso de Unit Testing con Jest en React

Clase anteriorSiguiente clase

Contenido del curso

Bienvenida

  • 1
    Bienvenido al Curso de Jest

    Bienvenido al Curso de Jest

    01:09 min
  • 2
    ¿Qué es un Test? ¿Qué tipos de Test Existen? Jest

    ¿Qué es un Test? ¿Qué tipos de Test Existen? Jest

    03:19 min

Introducción a Jest

  • 3
    Preparación del entorno con Jest

    Preparación del entorno con Jest

    09:07 min
  • 4
    Implementando pruebas para Boolean y Array

    Implementando pruebas para Boolean y Array

    08:20 min
  • 5
    Implementando pruebas a promesas

    Implementando pruebas a promesas

    Viendo ahora
  • 6
    Watch y Coverage

    Watch y Coverage

    12:13 min

Usando Jest con React

  • 7
    Preparar proyecto

    Preparar proyecto

    13:35 min
  • 8
    Crear mocks

    Crear mocks

    11:32 min
  • 9
    Implementar provider mock

    Implementar provider mock

    14:15 min
  • 10
    Snapshot

    Snapshot

    08:32 min
  • 11
    Probar Actions

    Probar Actions

    05:21 min
  • 12
    Probar Reducers

    Probar Reducers

    07:24 min
  • 13
    Probar peticiones fetch

    Probar peticiones fetch

    10:12 min

Deploy y CI con Travis

  • 14
    Jest + CI

    Jest + CI

    09:02 min
  • 15
    Probando el proyecto antes de hacer deploy

    Probando el proyecto antes de hacer deploy

    07:49 min
  • 16
    Recapitulación y cierre

    Recapitulación y cierre

    00:56 min
  • Tomar el examen del curso
    • David Flores

      David Flores

      teacher•
      hace 6 años

      para lo typos, les recomiendo este plugin Code Spell Checker

        Rafael Alvarez Cardona

        Rafael Alvarez Cardona

        student•
        hace 5 años

        Genial tu aporte David :D

        Bernardo Aguayo Ortega

        Bernardo Aguayo Ortega

        student•
        hace 5 años

        GRacias!!!

      Julian Franco

      Julian Franco

      student•
      hace 5 años

      Para tener soporte de intellisense en VSCode se puede instalar npm i -D @types/jest y van a poder autocompletar las funciones que vienen en el package sin instalar una extension y no agrega peso al bundle de produccion.

      Tambien van a poder autocompletar las funciones validas utilizando CTRL + Spacebar:

      test('nombre', () => { expect(value). // CTRL+Spacebar aca para ver opciones validas })

      Como tienen instalados los tipos, tambien pueden hover por encima de las funciones y van a obtener los argumentos que toman, los tipos de esos argumentos, y una descripcion de que es lo que hace cada funcion.

        Israel Blas

        Israel Blas

        student•
        hace 2 años

        Tqm Julian

      David Alejandro Velázquez Villegas

      David Alejandro Velázquez Villegas

      student•
      hace 5 años

      Hola, me entró la duda de porque en el caso de probar funciones asíncronas teníamos que hacer un return dentro de la función anónima e investigando me encontré con esta sección dentro de la documentación de jest se las comparto por si le quieren echar un ojo https://jestjs.io/docs/asynchronous

      Rulo Code

      Rulo Code

      student•
      hace 6 años

      Probando promesas .then

      test('Probar una promesa', ()=> { return reverseString2('hola') .then(string => { expect(string).toBe('aloh') }) })

      Probando promesa await

      test('Probar async/await', async ()=>{ const string = await reverseString2('hola'); expect(string).toBe('aloh') })

      Correr algo antes y después de nuestras pruebas

      afterEach( () => console.log('Despues de cada prueba') ); afterAll( () => console.log('Despues de todas las pruebas') ); beforeEach( () => console.log('antes de cada prueba') ); beforeAll( () => console.log('antes de todas las pruebas') );
        Bernardo Aguayo Ortega

        Bernardo Aguayo Ortega

        student•
        hace 5 años

        Gracias Camilo!!! por cierto vi ua publicación de Freddy y sales! Felicidades!!

      roy vargas

      roy vargas

      student•
      hace 4 años

      Hola! Les comparto otra manera de probar las promesas:

      Screenshot_1.png

      Alan David R.L.

      Alan David R.L.

      student•
      hace 6 años

      Implementando pruebas a código asíncrono

      const reverseStringPromise = str => { return new Promise((resolve, reject) => { if (!str) { reject(Error("There is no string")); } resolve(str.split("").reverse().join("")); }); }; // Test promises test("The promise should return a reversed word", () => { return reverseStringPromise("Platzi").then(str => { expect(str).toBe("iztalP"); }); }); // Test async-await test("The async-await block code should return a reversed word", async () => { const str = await reverseStringPromise("adidas"); expect(str).toBe("sadida"); }); // Funcion que se ejecuta despues de cada prueba afterEach(() => console.log("After each test")); // Funcion que se ejetuta despues de todas las pruebas afterAll(() => console.log("All the test ended.")); // Funcion que se ejecuta antes de cada prueba beforeEach(() => console.log("Before each test")); // Funcion que se ejecuta antes de todas las pruebas beforeAll(() => console.log("Beginning of all the tests"));
      Juan Gaybre Flores

      Juan Gaybre Flores

      student•
      hace 5 años

      Para practicar hice una Promise con un random, de ese valor random depende si pasa la prueba o no 😄

      2020-07-16_14h59_01.png

        OSCAR DARIO PAZ BENAVIDES

        OSCAR DARIO PAZ BENAVIDES

        student•
        hace 4 años

        nice

      Bryson Steven Mosquera Florez

      Bryson Steven Mosquera Florez

      student•
      hace 5 años

      En la prueba de las promesas no es necesario retornar la función de reverseString2, ya que la prueba como tal se realiza dentro del then:

      const reverseString2 = str => { return new Promise((resolve, reject) => { if(!str) { reject(Error('Error')); } resolve(str.split('').reverse().join('')); }); }; test('Probando una promesa', () => { reverseString2('Hola') .then(string => { expect(string).toBe('aloH'); }); });
      Jose Montoya

      Jose Montoya

      student•
      hace 5 años

      Para Jest en general les recomiendo este plugin de vscode, tiene snippets, linteo, permite ejecutar un debugg de cada test e incluso va indicando cuales ya corriste de manera exitosa. VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest

      Jorge Eliecer Rangel Jimenez

      Jorge Eliecer Rangel Jimenez

      student•
      hace 6 años

      Probando promise y async/await

      const reverseStringPromise = str => { return new Promise((resolve, reject) => { if (!str) { reject(Error("Error")); } resolve( str .split("") .reverse() .join("") ); }); }; test("Probar una promesa", () => { return reverseStringPromise("hola").then(string => { expect(string).toBe("aloh"); }); }); test("Probar async/await", async () => { const string = await reverseStringPromise("hola"); expect(string).toBe("aloh"); }); afterEach(() => { console.log("Despues de cada prueba"); }); afterAll(() => { console.log("Despues de todas las pruebas"); }); beforeEach(() => { console.log("Antes de cada prueba"); }); beforeAll(() => { console.log("Antes de todas las pruebas"); });
      Juan David Ramirez Mendoza

      Juan David Ramirez Mendoza

      student•
      hace 5 años

      No hay una forma de probar el bloque **catch **para saber que mi unidad de código está lanzando la excepción que debería lanzar?

        Samuel Miranda Martínez

        Samuel Miranda Martínez

        student•
        hace 5 años

        Hola, puedes intentar algo así:

        test("Probando promesas", () => { return reverseString2("Hola") .then((string) => { expect(string).toBe("aloH"); }) .catch((string) => { expect(string).toStrictEqual(Error("Error")); }) });
        Jair Israel Avilés Eusebio

        Jair Israel Avilés Eusebio

        student•
        hace 5 años

        Yo lo haria de la siguiente manera:

        test('Should fail Promise', () => { return reverseString2('Hello').then(() => { // Si la Promesa se resuelve, se lanzaria una excepcion expect.fail('An error should thrown'); }).catch((err) => { // Definir las aserciones para el escenario de falla expect(err.message).toBe('error message'); }); });
      Andres Roberto Coello Goyes

      Andres Roberto Coello Goyes

      student•
      hace 6 años
      const reverseString2 = (str) => { return new Promise( (resolve, reject) => { if(!str || str == ''){ reject(new Error('no existe el texto')); }else{ resolve(str.split("").reverse().join("")); } }) } test('probando promesas', () => { return reverseString2('Hola') .then(string => { expect(string).toBe('aloH'); }) })
      Irungaray Agustin

      Irungaray Agustin

      student•
      hace 5 años

      Dejo los tests escritos hasta ahora:

      const text = "Hello World"; const fruits = ['apple', 'mellon', 'banana']; // Strings test('Should render a Hello World', () => { expect(text).toMatch(/Hello World/) }); // Arrays test('Do we have Banana?', () => { expect(fruits).toContain('banana') }); test('> than', () => { expect(10).toBeGreaterThan(9) }) // Boolean test('True', () => { expect(true).toBeTruthy() }); // Callbacks const reverseString = (str, callback) => { callback(str.split("").reverse().join("")) }; test('Test Callback', () => { reverseString('Hola', (str) => { expect(str).toBe('aloH') }) }); // Promises const reversePromiseString = str => { return new Promise((resolve, reject) => { if (!str) { reject(Error('Error')) } resolve(str.split("").reverse().join("")) }); }; test('Test Promise', () => { return reversePromiseString('Hola') .then(string => { expect(string).toBe('aloH') }); }); // Async & Await test('Test async/Await', async () => { const string = await reversePromiseString('Hola'); expect(string).toBe('aloH') }); // Run code we need after each test afterEach(() => console.log('After each test')); afterAll(() => console.log('After all tests')); // Run code we need before each test beforeEach(() => console.log('Before each test')); beforeAll(() => console.log('Before all tests'));
      Emmanuel Rodríguez

      Emmanuel Rodríguez

      student•
      hace 5 años

      Scoping Para agrupar cada grupo de test , es posible utilizar el bloque describe .

      beforeAll(() => console.log('1 - beforeAll')); afterAll(() => console.log('1 - afterAll')); beforeEach(() => console.log('1 - beforeEach')); afterEach(() => console.log('1 - afterEach')); test('', () => console.log('1 - test')); describe('Scoped / Nested block', () => { beforeAll(() => console.log('2 - beforeAll')); afterAll(() => console.log('2 - afterAll')); beforeEach(() => console.log('2 - beforeEach')); afterEach(() => console.log('2 - afterEach')); test('', () => console.log('2 - test')); }); // 1 - beforeAll // 1 - beforeEach // 1 - test // 1 - afterEach // 2 - beforeAll // 1 - beforeEach // 2 - beforeEach // 2 - test // 2 - afterEach // 1 - afterEach // 2 - afterAll // 1 - afterAll
      Jorge De Jesus Tejeda Bello

      Jorge De Jesus Tejeda Bello

      student•
      hace 4 años

      Si por alguna razón al utilizar Async/Await y corren la prueba reciben el siguiente error

      ReferenceError: regeneratorRuntime is not defined

      deben agregar en el archivo .babelrc el siguiente objeto

      { "presets": [ [ "@babel/preset-env", { "targets": { "node": “current” } } ] ] }

      'node':current es para que detecte la version de node que tengas instaladas y detectara automaticamente si tienes Async/Await

      despues de esto vamos a instalar

      nom i @babel/preset-env -D
        Jon Ander Oribe

        Jon Ander Oribe

        student•
        hace 4 años

        A mi me daba fallaba React con esa configuración, pero me empezó a funcionar con una muy cercana. Os la dejo aquí por si es útil.

        { "presets": [ "@babel/preset-env", "@babel/preset-react" ], "targets":{ "node":"current" }, "plugins": [ "babel-plugin-transform-class-properties" ] }
        Diego Toro Cárdenas

        Diego Toro Cárdenas

        student•
        hace 3 años

        Recordé una clase de Webpack donde enseñan a usar Babel.

      Amgonzalez@altec.com.ar

      Amgonzalez@altec.com.ar

      student•
      hace 4 años

      Para quien lo necesite la aplicacion con todos los TEST vistos hasta esta clase. Repositorio GIT una vez descargada: npm install y npm jest para iniciar. descargar

      Irving Juárez

      Irving Juárez

      student•
      hace 4 años

      Yo creo que el afterAll, beforeAll, etc son un poco mas utiles cuando a nuestras pruebas les establecemos un scope usando describe. Describe nos ayuda a agrupar una seria de pruebas, se usa de la siguiente forma:

      describe("title of the group", () => { test("...", () => {}) test("...", () => {}) test("...", () => {}) })
      Sergio Estrella

      Sergio Estrella

      teacher•
      hace 4 años

      Algo a tener en cuenta al hacer tests a procesos asíncronos es que podemos delimitar el numero de callbacks que esperamos sean llamados. . Esto lo podemos hacer con el método que aparece abajo, designando el número de callbacks o assertions que esperamos pasen.

      expect.assertions(3)

      Por ejemplo, si la función doAsync llama dos callbacks, podemos numerar que esperamos 2 assertions, como se muestra en el ejemplo.

      test('doAsync calls both callbacks', () => { expect.assertions(2); function callback1(data) { expect(data).toBeTruthy(); } function callback2(data) { expect(data).toBeTruthy(); } doAsync(callback1, callback2); });

      Si quieren saber más acerca de los métodos que tiene expect, les dejo acá la documentación oficial de Jest ;)

        Reinaldo Mendoza

        Reinaldo Mendoza

        student•
        hace 4 años

        Buenisimo

      Jair Israel Avilés Eusebio

      Jair Israel Avilés Eusebio

      student•
      hace 5 años

      Aqui esta la liga para mayor detalle de las funciones auxiliares hooks. No confudnir con las funciones de react hooks.

      Michelle Elizabeth Pérez Sosa

      Michelle Elizabeth Pérez Sosa

      student•
      hace 4 años

      Si es que les falla el async/await a mi me sirvió crear un archivo setupTest.js importando dentro runtime (import 'regenerator-runtime/runtime') y llamando a este archivo desde el package.json como "jest": { "setupFilesAfterEnv": [ "./setupTests.js" ] }

      justo después de las devDependencies

        Diego Toro Cárdenas

        Diego Toro Cárdenas

        student•
        hace 3 años

        De pronto estas respuestas se complementan.

    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