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 el examen del curso
    • 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 4 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 5 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 3 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 3 años

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

        Jose Ceron

        Jose Ceron

        student•
        hace 3 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 4 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 3 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 5 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)

        https://www.w3schools.com/cssref/css_selectors.asp

      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.

    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