CursosEmpresasBlogLiveConfPrecios

Crear mocks

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

    08:30 min
  • 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

    Viendo ahora
  • 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
        Marlon Estiben Varon Gonzalez

        Marlon Estiben Varon Gonzalez

        student•
        hace 5 años

        Me aparecia este error It looks like you called mount() without a global document being loaded. y lo solucione agregandole esto al "jest" en el .json

        <"jest": { "setupFilesAfterEnv":[ "<rootDir>/src/__test__/setupTest.js" ], "moduleNameMapper": { "\\.(styl|css)$": "<rootDir>/src/__mocks__/styleMock.js" }, "testEnvironment": "jsdom" }>
          Gonzalo Pimentel

          Gonzalo Pimentel

          student•
          hace 5 años

          Gracias tenía el mismo error.

          Michael Merchan

          Michael Merchan

          student•
          hace 5 años

          Gracias, tenia el mismo error.

        Janice Prendas

        Janice Prendas

        student•
        hace 6 años

        Los mocks son funciones que simulan acciones que deberia hacer nuestra app

          Héctor Hugo Sandoval Marcelo

          Héctor Hugo Sandoval Marcelo

          student•
          hace 6 años

          Gracias por la explicación

          Bernardo Aguayo Ortega

          Bernardo Aguayo Ortega

          student•
          hace 5 años

          just like that! Gracias!

        Kevin Parra Lopez

        Kevin Parra Lopez

        student•
        hace 4 años

        Si no les funciona el mount instalen esto

        npm install --save-dev --save-exact jsdom jsdom-global

        Y lo importan antes de react en su test

        import 'jsdom-global/register'
          Jahiker Rojas

          Jahiker Rojas

          student•
          hace 4 años

          Graciassss!!! Esto si me funcionó!

          Andrés Jonathan Enríquez Jiménez

          Andrés Jonathan Enríquez Jiménez

          student•
          hace 3 años

          Gracias Kevin, me funcionó.

        Julian Franco

        Julian Franco

        student•
        hace 5 años

        Si quieren tener consistencia en el sintaxis de sus pruebas utilizando export/import solo tienen que hacer un ajuste de babel cambiando el .babelrc por su verison JavaScript babel.config.js. Al tener eso la sintaxis cambia un poco y queda asi:

        // babel.config.js module.exports = { presets: ['@babel/preset-env', '@babel/preset-react'], plugins: ['babel-plugin-transform-class-properties'], };

        Adiconalmente, si prefieren separar la configuracion de Jest a otro archivo, para separar las responsabilidades dentro de su estructura, lo pueden hacer creando un archivo jest.config.js donde pueden tambien ajustar varias opciones adicionales:

        // jest.config.js module.exports = { verbose: true, collectCoverage: true, setupFilesAfterEnv: ['<rootDir>/src/__test__/setupTest.js'], moduleNameMapper: { '\\.(styl|css)$': '<rootDir>/src/__mocks__/styleMock.js', }, };

        Asi congestionan menos el package.json y pueden colocar flags automaticos como -- coverage dentro de este archivo. Al final la importacion quedo como:

        // styleMock.js export default {};

        Ahora Jest puede resolver exportaciones utilizando sintaxis de ES6.

          Pablo Domínguez Durán

          Pablo Domínguez Durán

          student•
          hace 5 años

          Súper aporte! Gracias ^^

        Camilo Perilla

        Camilo Perilla

        student•
        hace 5 años

        Jest no puede parsear archivos estaticos (stylesheets, fuentes, imagenes, iconos) por lo que se tienen que mockear (reemplazar) por javascript plano

          Jorge Arango

          Jorge Arango

          student•
          hace 4 años

          Esto sí es una explicación!

          Jorge Arango

          Jorge Arango

          student•
          hace 4 años

          Para complementar, se debe añadir la configuración del parámetro "moduleNameMapper" para que jest use una configuración diferente para el tipo de archivos especificado, en este caso por medio de la regex \.(styl|css)$ https://jestjs.io/docs/tutorial-react-native#modulenamemapper

        Juan Carlos Del Rio Enciso

        Juan Carlos Del Rio Enciso

        student•
        hace 5 años

        Yo estoy implementando jest en el proyecto que hicimos en el curso de React Hooks que es bastante parecido al repo del profesor, pero lo hice con la versión 17 de React, me salía un error en mount(<Footer />), no reconocía mount de enzyme. Tuve que instalar la versión 16 de React para que me lo reconozca, con este comando: npm i --save react@16 react-dom@16 y después instalar nuevamente: npm i --save-dev enzyme enzyme-adapter-react-16 y todo salió perfecto Espero les sirva esta solución para los que tienen proyectos con React 17+

          Erick Ospina Puertas

          Erick Ospina Puertas

          student•
          hace 5 años

          No es una buena solución, basicamente estás proponiendo hacer una regresión de la versión de react solo para hacer funcionar jest, pero si tienes dependencias que funcionan con versiones superiores a la 16?, hay librerías para react 17

          Gabriel Alfonso

          Gabriel Alfonso

          student•
          hace 5 años

          También puede usar siguiente librería y continuar con la v17 de react

          npm install --save-dev @wojtekmaj/enzyme-adapter-react-17

        Kevin Parra

        Kevin Parra

        student•
        hace 4 años

        Me saliá error y al final la solución que encontré fue usar shallow en vez de mount. Como lo entendí, shallow sirve para testear los componentes como unitarios, sin efectos en otros hijos o componentes. El código:

        import React from "react"; import { shallow } from "enzyme"; import Footer from "../../components/Footer"; describe("<Footer />", () => { const footer = shallow(<Footer />); test("Footer component render", () => { expect(footer.length).toEqual(1); }); });
          Sergio Valadez

          Sergio Valadez

          student•
          hace 4 años

          Esto me ayudó bastante, no encontraba como solucionar mi error. Gracias por compartir!

          Jose Ceron

          Jose Ceron

          student•
          hace 4 años

          Muchas gracias! De esta forma pude continuar con los test

        Manuel Durán

        Manuel Durán

        student•
        hace 5 años

        Me da el error:

        It looks like you called mount() without a global document being loaded.

        No estoy muy seguro del por que

          Manuel Durán

          Manuel Durán

          student•
          hace 5 años

          ok, logre resolverlo con este articulo

          https://lifesaver.codes/answer/it-looks-like-you-called-mount()-without-a-global-document-being-loaded

          Pero realmente esto es lo que me molesta de las explicaciones en platzi. se las saltan por encima y tiran de dependencias como si uno ya tuviera asumido que conoce la dependencia de enzyme y sus problemas, con suerte vengo a intentar de aprender a usar Jest

          Nilson Diaz

          Nilson Diaz

          student•
          hace 5 años

          Hey ! Tienes razon , tu comentario me fue de ayuda , tenia el mismo problema al parecer los cursos donde se implementan tests en react estan algo desactualizados

          Tambien encontre que jest ya viene con jsdom incluido simplemente se debe poner en su configuracion

          testEnvironment: 'jsdom',
        Gonzalo Zavala Mendoza

        Gonzalo Zavala Mendoza

        student•
        hace 6 años
        import React from 'react'; import { createStore } from 'redux'; import { Router } from 'react-router-dom'; import { Provider } from 'react-redux'; import { createBrowserHistory } from 'history'; import initialState from '../initialState'; import reducer from '../reducers'; const store = createStore(reducer, initialState); const history = createBrowserHistory(); const ProviderMock = props => ( <Provider store={store}> <Router history={history}> {props.children} </Router> </Provider> ); export default ProviderMock;
        Cristian Rodríguez

        Cristian Rodríguez

        student•
        hace 5 años

        Al muchacho se le olvidó instalar history

        npm i history
        Carlos Morán

        Carlos Morán

        student•
        hace 4 años

        Este error se puede solucionar ocupando como test environment a jsdom.

        Screenshot 2021-09-12 214827.jpg
        Jest ya viene con jsdom, y solo es de agregarlo en su configuración, de modo que la mía es:

        "jest": { "setupFilesAfterEnv": [ "<rootDir>/src/test/setupTest.js" ], "moduleNameMapper": { "\.(styl|css)$": "<rootDir>/src/mocks/styleMock.js" }, "testEnvironment": "jsdom" }

        Y con eso ya no me dio error

        Screenshot 2021-09-12 215157.jpg

          Yeisson Esteban Jimenez Bustos

          Yeisson Esteban Jimenez Bustos

          student•
          hace 4 años

          Excelente muchas gracias 😉😉

          Luis Miguel Falcon Montaño

          Luis Miguel Falcon Montaño

          student•
          hace 4 años

          Muchas gracias, me fue de muchas ayuda :)

        Iván Darío Sánchez Jiménez

        Iván Darío Sánchez Jiménez

        student•
        hace 4 años

        Para quienes tuvieron error con mount, deben instalar jest-environment-jsdom

        npm install --save-dev jest-environment-jsdom

        A partir de la version >28 de Jest, ya no se incluye jest-environment-jsdom y debe ser instalado por separado. Y luego deben agregar ´ "testEnvironment": "jsdom" en la configuración de Jest en el package.json:

        "jest": { "setupFilesAfterEnv": [ "<rootDir>/src/__test__/setupTest.js" ], "moduleNameMapper": { "\\.(styl|css)$": "<rootDir>/src/__mocks__/styleMock.js" }, "testEnvironment": "jsdom" }
          Juan Sebastian Obregón Cuellar

          Juan Sebastian Obregón Cuellar

          student•
          hace 3 años

          Muchas gracias, me sirvió

        Paolo Carrion

        Paolo Carrion

        student•
        hace 4 años

        Mock Functions

        / Hola todos, aqui les dare una explicacion mas certera de lo que son las Mock Functions y para se utilizarion. / Las Mock Functions (o en español Funciones Simuladas), son funciones que nos permiten ver e inspeccionar el comportamiento de una determinada funcion que nosotros hayamos creado, las mock functions sirven para poder saber si una determinada funcion se esta ejecutando del modo que queremos que esta se ejecute o no, las mock functions son muy utiles, ya que los lenguages de programacion por defecto no nos permiten inspeccionar o testear a detalle una funcion. / Cabe recalcar que las Mock Functios nos permiten inspeccionar tanto funciones creadas apartir de function o () =>, y los metodos de una instancia de una determinada clase. / Saludos.

        Angelica Landazabal

        Angelica Landazabal

        student•
        hace 6 años

        Hola Team, me gustaría saber si por favor me pueden ayudar debido a que me está dando un error al momento de ejecutar el primer test:

        Error.png

        No sé si me hace falta alguna configuración extra o algo por el estilo. Yo hice la practica aparte y me funcionó pero al momento de hacerla en mi proyecto dió ese error.

        Se los agradecería muchoo. ¡Muchas gracias!

          Santiago Arcila

          Santiago Arcila

          student•
          hace 5 años

          ya probaste reinstalar enzyme?

          Omar Rivas

          Omar Rivas

          student•
          hace 5 años

          Hola Angelica puedes importar las librerías de esta forma y funciona

          //import { configure } from 'enzyme'; //import Adapter from 'enzyme-adapter-react-16'; const configure = require("enzyme").configure; const Adapter = require("enzyme-adapter-react-16"); configure({ adapter: new Adapter() });

          Saludos !!

        andrés eduardo betancourt bescanza

        andrés eduardo betancourt bescanza

        student•
        hace 5 años

        Si les aparece el error de mount es porque react 17 todavia no es compatible.

        TypeError: Cannot read property 'child' of undefined 6 | describe("Motando footer", () => { 7 | test("Render del componente Footer", () => { > 8 | const footer = mount(<Footer />);

        https://github.com/enzymejs/enzyme/issues/2462

        Lastimosamente lo que me toco fue degradar react y dom a la version 16

        npm i react@16.13.1 react-dom@16.13.1
          Rafael Soriano Ramírez

          Rafael Soriano Ramírez

          student•
          hace 5 años

          Excelente aporte, me sentí bastante frustrado

        Jorge Zerpa

        Jorge Zerpa

        student•
        hace 3 años

        Si les sale este error-> " It looks like you called mount() without a global document being loaded."

        see soluciona:

        1. instalar jsdom: npm install --save-dev --save-exact jsdom jsdom-global

        2. En Footer.test.js: import 'jsdom-global/register'; IMPORTAR EN LA PRIMERA LINEA, INCLUSO ANTES DE IMPORTAR REACT

        Aca esta la documentación de enzyme explicando el porque de este cambio https://enzymejs.github.io/enzyme/docs/guides/jsdom.html

        HAPPY CODING! :)

        Ever Alfredo Sorto Ayala

        Ever Alfredo Sorto Ayala

        student•
        hace 5 años

        no entendi lo del punto min 4:55

          Samuel Miranda Martínez

          Samuel Miranda Martínez

          student•
          hace 5 años

          Las clases de css se llaman con un punto. (.Class)

        Bruno Kamiche

        Bruno Kamiche

        student•
        hace 5 años
        2020-12-06_22-24.png
        Me sale ese error
        2020-12-06_22-24_1.png

        Alguna solución ? :(

          andrés eduardo betancourt bescanza

          andrés eduardo betancourt bescanza

          student•
          hace 5 años

          Me paso los mismo, investigando un poco me di cuenta que no es compatible con la version 17 de react, asi que tuve que instalar la version 16

          npm i react@16.13.1 react-dom@16.13.1

          https://github.com/enzymejs/enzyme/issues/2462

        Juan Camilo Moreno

        Juan Camilo Moreno

        student•
        hace 5 años

        Como debería implementarlo para trabajar con imágenes?

          Juan Pablo Calao Pérez

          Juan Pablo Calao Pérez

          student•
          hace 5 años

          Debes agregar en la configuración de jest lo siguiente:

          "moduleNameMapper": { "\\.(jpg|ico|jpeg|png|gif|svg)$": "<rootDir>/__mocks__/fileMock.js" }

          Y el contenido de ese archivo fileMock.js debería exportar un string vacío:

          export default ''

          Para más información, puedes ver la clase número 8

        Carlos David Ramírez Gómez

        Carlos David Ramírez Gómez

        student•
        hace 5 años

        ¿Cómo creo un mock cuando utilizo imágenes?

          Jair Israel Avilés Eusebio

          Jair Israel Avilés Eusebio

          student•
          hace 5 años

          Si lo que quieres testear es una cambio en alguna imagenes basado en algun evento, te recomiendo investigar sobre snapshot testing y visual regression testing.

          jest-image-snapshot es una libreria muy popular.