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 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
        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 6 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 3 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 5 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 6 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 5 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.