CursosEmpresasBlogLiveConfPrecios

Implementar provider mock

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

    11:32 min
  • 9
    Implementar provider mock

    Implementar provider mock

    Viendo ahora
  • 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
        Janice Prendas

        Janice Prendas

        student•
        hace 6 años

        Probablemente muchos se hagan esta pregunta: ¿Cuándo utilizar mount y cuándo utilizar shallow? . mount --> Cuando necesitas el DOM shallow --> Solo necesitas algo particular del componente. No ocupas todo el DOM

          Luis Martinez

          Luis Martinez

          student•
          hace 5 años

          Janice, das muy buenos aportes, gracias. Complementando, chequen: https://stackoverflow.com/questions/38710309/when-should-you-use-render-and-shallow-in-enzyme-react-tests

          ANTHONY JEAMPIER RANGEL RODRIGUEZ

          ANTHONY JEAMPIER RANGEL RODRIGUEZ

          student•
          hace 5 años

          Excelente, gracias!

        Janice Prendas

        Janice Prendas

        student•
        hace 6 años

        Shallow permite traer elementos y probarlos como una unidad. Es útil cuando solo necesito algo particular de ese componente y no necesito toda su estructura y elementos del DOM

        Luis Felipe Hernandez Cristancho

        Luis Felipe Hernandez Cristancho

        student•
        hace 5 años

        La prueba solo me funcionó poniendo un

        return( <Provider store={store}> <Router history={history}>
        {props.children} </Router> </Provider> )

        por si le pasa a alguien

          Wilmer Diaz

          Wilmer Diaz

          student•
          hace 5 años

          Igual a mí compañero, gracias por el aporte. Queda algo así:

          const store = createStore(reducer, initialState); const history = createBrowserHistory(); const ProviderMock = (props) => { return ( <Provider store={store}> <Router history={history}>{props.children}</Router> </Provider> ); };
          Diego Grueso

          Diego Grueso

          student•
          hace 5 años

          Gracias chicos, estuve 1h, y no encontraba el por que me generaba ese error.

        Paolo Carrion

        Paolo Carrion

        student•
        hace 4 años

        Formas de crear Mock Functions

        / En jest, podemos crear mock functions de tres formas distintas, esto se debe a que aunque todas tienen como objetivo testear funciones, hay diferentes formas de crear funciones en JavaScript. /

        • jest.fn(): Este método es la forma principal de crear una función de imitación, si declaramos la función de imitación de esta manera, no es obligatorio añadir una implementación (conocida como la función que espiamos también), pero como es normal añadimos la implementación, y para ello, tenemos que pasar la función como parámetro del método. / Ejemplo: /
        const mockFunction = jest.fn((a,b) => { return a + b })

        /

        • jest.spyOn(): Este método es otra forma de crear una función mock, sin embargo, este se enfoca en mockear los métodos de alguna instancia creada como de su clase principal, y este método solo puede ser usado para ellas, cabe mencionar que no podemos usar este método para el modelo de la clase original, solo para sus instancias, este método recibe dos parámetros, el primero es la instancia declarada como de la clase principal y el segundo es el nombre del método que vamos a espiar. / Ejemplo: /
        class Computer { constructor(brand, size, price, ram) { this.brand = brand; this.size = size; this.price = price; this.ram = ram; } getInformation(){ return { brand: this.brand, size: this.size, price: this.price, ram: this.ram, } } setInformation(brand, size, price, ram) { this.brand = brand; this.size = size; this.price = price; this.ram = ram; return { brand: this.brand, size: this.size, price: this.price, ram: this.ram, } } } const MackBookPro = new Computer('Apple', '3000px', 5000, 36) const getInformationSpier = jest.spyOn(MackBookPro, 'getInformation') const setInformationSpier = jest.spyOn(MackBookPro, 'setInformation') test('testing the methods of the class computer', () => { expect(MackBookPro.getInformation()).toEqual({ brand: 'Apple', size: '3000px', price: 5000, ram: 36, }) expect(MackBookPro.setInformation('Toshiba', '2500px', 1000, 20)).toEqual({ brand: 'Toshiba', size: '2500px', price: 1000, ram: 20, }) expect(getInformationSpier).toHaveBeenCalled() expect(setInformationSpier).toHaveBeenCalledTimes(1) })

        /

        • jest.mock(): Este método sirve para burlarse automáticamente de todas las funciones (sólo funciones autosuficientes, no métodos de alguna clase) que tenga un determinado fichero, sin necesidad de burlarse de todas y cada una de las funciones de ese determinado fichero, este método recibe dos parámetros (el segundo parámetro no es obligatorio), el primero es el fichero cuyas funciones queremos burlar, y el segundo es una función que se ejecutará en lugar de todas las funciones que hayamos definido dentro del otro fichero y que queramos probar, si sólo utilizamos el primer parámetro, entonces cuando utilicemos las funciones del fichero importado, éstas no devolverán nada, ya que las funciones fueron burladas, y si queremos obtener un determinado valor después de utilizar las funciones del fichero importado, tenemos que utilizar el segundo parámetro, pero éste tiene que devolver una función burlada utilizando jest. fn(). / Ejemplo 1: /
        // anotherFile.js const addition = (a, b) => { return a + b; } const subtraction = (a, b) => { return a - b; } module.exports = { addition, subtraction, }
        jest.mock('./anotherFile') const additionFunction = require('./anotherFile').addition const subtractionFunction = require('./anotherFile').subtraction additionFunction(1,2) additionFunction(3,4) subtractionFunction(4,3) subtractionFunction(2,1) test('testing mathematical functions', () => { console.log(additionFunction.mock) console.log(subtractionFunction.mock) expect(additionFunction).toHaveBeenCalled() expect(subtractionFunction).toHaveBeenCalled() })

        /

        • jest.createMockFromModule(): Este método (también conocido bajo el alias .genMockFromModule()), nos permite transformar las funciones burladas de otro fichero por jest. mock() en funciones normales, de esta manera, serán funciones normales o funciones no burladas y funciones burladas al mismo tiempo, lo que significa que podemos manejarlas como si fueran funciones normales, y además utilizar las propiedades y métodos de una función burlada, esto es útil ya que cuando burlamos todas las funciones de un determinado fichero, estas funciones no pueden ser utilizadas como funciones normales, por ejemplo, esto hace que no obtengamos lo que devuelven las funciones burladas por sí mismas, ya que al ser burladas, este método solo debe recibir un parámetro, este parámetro es el archivo cuyas funciones queremos burlar, entonces para des-bloquear la función de ese archivo, tenemos que invocar esas funciones, y usarlas como variables, y luego debemos usar jest. fn(), y como parámetro de jest.fn(), tenemos que implementar el código de la función original que fue mockeada, y ahora, podemos usar las funciones como si fueran funciones normales y como funciones mockeadas, además de lo que dijimos anteriormente, si estamos exportando diferentes tipos de datos de un determinado archivo, también podemos usarlos en otro archivo, al usar este método, sólo necesitamos llamar a esos datos, pero el método trata los diferentes tipos de variables de diferentes maneras, aquí explicamos eso: / Función: Crea una nueva función, y esta será burlada, por lo que los parámetros de dicha función serán eliminados y por lo tanto cuando intentemos acceder a los parámetros, estos no aparecerán, y cuando la función lo sea, esta devolverá undefined. Estos cambios también se aplican a las funciones async. / Clase: Crea una nueva clase, se mantendrá la estructura de la clase original, pero se burlarán todas las propiedades y los métodos de sus instancias, por lo tanto lo que ocurría con la función normal al ser burlada también ocurrirá con los métodos de la clase burlada. / Objeto: Crea un nuevo objeto, que será exactamente igual al objeto original, por lo que se mantienen las claves del objeto y se burlan los valores de las claves. / Array: Crea un nuevo array vacío, ignorando el original. / Primitiva: Crea una nueva variable con el mismo valor primitivo que la variable original. / Ejemplo 1: /
        // anotherFile.js const addition = (a, b) => { return a + b; } const subtraction = (a, b) => { return a - b; } module.exports = { addition, subtraction, }

        /

        const mathematicalFunctions = jest.createMockFromModule('./anotherFile') mathematicalFunctions.addition = jest.fn((a, b) => { return a + b; }) mathematicalFunctions.subtraction = jest.fn((a, b) => { return a - b; }) const additionFunction = mathematicalFunctions.addition const subtractionFunction = mathematicalFunctions.addition test('testing an addition function', () => { console.log(additionFunction(12,23)) console.log(additionFunction.mock) console.log(subtractionFunction(20,5)) console.log(subtractionFunction.mock) })

        / Ejemplo 2: /

        const typesOfData = jest.createMockFromModule('./anotherFile'); test('should run example code', () => { expect(typesOfData.theFunction.name).toEqual('workSomethingOut'); expect(typesOfData.theFunction.length).toEqual(0); expect(typesOfData.theClass.constructor.name).toEqual('User'); expect(typesOfData.theClass.toGreet.name).toEqual('toGreet'); expect(typesOfData.theObject).toEqual({ brand: 'Apple', price: 1000, }); expect(typesOfData.theArray.length).toEqual(0); expect(typesOfData.theNumber).toEqual(12); expect(typesOfData.theString).toEqual('RAM'); expect(typesOfData.theBoolean).toEqual(true); });

        / Saludos.

          Sneyder Joaquin Huertas Rodríguez

          Sneyder Joaquin Huertas Rodríguez

          student•
          hace 4 años

          Gracias!!

        Cristian Caballero

        Cristian Caballero

        student•
        hace 6 años

        Estoy teniendo este error en el test de "Render del Titulo Header"

        Method “text” is meant to be run on 1 node. 0 found instead.

        Revise varias veces y el codigo es el mismo

          Julian Estrada

          Julian Estrada

          student•
          hace 6 años

          Hola Cristina a mi también me salia el error y sabe que es ingresa a tu archivo de ProviderMock.js y mira que todo este bien escrito, yo tenia mal la palabra **children **estaba así childern.

          Me cuentas si eso te ayudo

          Cristian Caballero

          Cristian Caballero

          student•
          hace 6 años

          de hecho si, fue algo asi mi error, gracias

        Sebastián Mera

        Sebastián Mera

        student•
        hace 4 años

        El curso parece un tutorial en lugar de un curso.

          Johan Quijano

          Johan Quijano

          student•
          hace 4 años

          Como debería ser un curso entonces?

          César Palma

          César Palma

          student•
          hace 3 años

          una introducción explicando la teoría necesaria antes de codificar mas que ser un copia y pega. Es un curso antiguo, en los nuevos cursos oscar ya introduce correctamente las clases

        Martín David Roldán

        Martín David Roldán

        student•
        hace 4 años

        Si tienen el siguiente error:

        ProviderMock(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.

        Lo pude solucionar agregando un return en el ProviderMock, quedando asi:

        return ( <Provider store={store}> <Router history={history}> {props.children} </Router> </Provider> )
          Jose Ceron

          Jose Ceron

          student•
          hace 4 años

          Muchas gracias por tu aporte, fue de gran ayuda.

          Juan Hernandez

          Juan Hernandez

          student•
          hace 3 años

          Crack martin

        Mario Eduardo Contreras Serrano

        Mario Eduardo Contreras Serrano

        student•
        hace 4 años

        En la última prueba, en la de la función, no es necesario envolver el componente <Product/> con el <ProviderMock />, ya que al hacer "Render" con la funcion mount, se le estan pasando los dato a travez de las props del componente, dejando de lado Redux para adquirir esos datos!

        De igual forma al revisar el archivo de <Product/> se puede notar que en ningún lado se esta usando Redux.

        Al usar shallow es lo mísmo, mientras le pasemos props al componente se puede prescindir del <ProviderMock/>.

          Andrés Felipe Eslava Zuluaga

          Andrés Felipe Eslava Zuluaga

          student•
          hace 4 años

          Es verdadero:

          Muchas gracias!

          describe('<Product />', () => { test('Render de component Product', () => { const product = shallow( <ProviderMock> <Product /> </ProviderMock>, ); expect(product.length).toEqual(1); }); test('Comprobar el botón de comprar', () => { const handleAddToCart = jest.fn(); const wrapper = mount( <Product product={ProductMock} handleAddToCart={handleAddToCart} /> ); wrapper.find('button').simulate('click'); expect(handleAddToCart).toHaveBeenCalledTimes(1); }) });
          Mario Eduardo Contreras Serrano

          Mario Eduardo Contreras Serrano

          student•
          hace 4 años

          ¡Al cotrario @felipe_ez, es un placer ayudar! 🌈

        Alessandra Amicarella

        Alessandra Amicarella

        student•
        hace 4 años

        Cual es la diferencia entre Jest y Enzyme?

          Andres Gomez Hernandez

          Andres Gomez Hernandez

          student•
          hace 4 años

          Jest es un framework que nos permite testear javascript, convinacion de las palabras (javascript, test) -> jest.

          enzyme es una lib utilitaria que te permite acceder de una manera sencilla de obtener elementos y hacer aserciones.

        Pablo Nicolás Alonso

        Pablo Nicolás Alonso

        student•
        hace 5 años

        Error: Veo que a nadie le salió lo mismo...

        FAIL src/__test__/components/Header.test.js ● Test suite failed to run Invariant failed: Browser history needs a DOM 8 | 9 | const store = createStore(reducer, initialState); > 10 | const history = createBrowserHistory(); | ^ 11 | 12 | const ProviderMock = props => ( 13 | <Provider store={store}> at invariant (node_modules/tiny-invariant/dist/tiny-invariant.cjs.js:13:11) at createBrowserHistory (node_modules/history/cjs/history.js:273:16) at Object.<anonymous> (src/__mocks__/ProviderMock.js:10:17) at Object.<anonymous> (src/__test__/components/Header.test.js:3:1)
          Joe Harry Mancera Monroy

          Joe Harry Mancera Monroy

          student•
          hace 5 años

          hola, ¿Lograste arreglarlo?, estoy en lo mismo hahaha

          Joe Harry Mancera Monroy

          Joe Harry Mancera Monroy

          student•
          hace 5 años

          logrè agregarlo con lo indicado aquí

          Agregué jsdom al proyecto. Me quedó el ProviderMok algo así.

          import 'jsdom-global/register'; import React from 'react'; import { BrowserRouter } from 'react-router-dom'; import { createBrowserHistory } from 'history'; const history = createBrowserHistory(); const ProviderMock = (props) => ( <BrowserRouter history={history}> {props.children} </BrowserRouter> ); export default ProviderMock;
        Flor Dulcinea Peña Campos

        Flor Dulcinea Peña Campos

        student•
        hace 5 años

        ¿Cómo decidir qué cosas probar en una aplicación?

          Camilo Perilla

          Camilo Perilla

          student•
          hace 5 años

          Cosas que cuenten con un comportamiento muy personalizado. Por ejemplo un componente que dispache cierto tipo de acciones a la store de redux o un componente que genere cambios visuales por su cambio de estado. Recuerda que tus tests deben asemejarse a como tu aplicación es usada por los usuarios.

          Cristian Blandon

          Cristian Blandon

          student•
          hace 5 años

          En la clase ¿Qué es un Test? ¿Qué tipos de Test Existen? Jest, Óscar responde a la pregunta ¿Qué debemos de probar?

          Muy recomendado volver si quedaron dudas.

        Jeremy Zelaya

        Jeremy Zelaya

        student•
        hace 4 años

        Si se topan el error Invariant failed: Browser history needs a DOM, pueden usar createMemoryHistory.

        • Fuente: https://stackoverflow.com/questions/59508837/invariant-failed-browser-history-needs-a-dom
        Danilo Valenzuela

        Danilo Valenzuela

        student•
        hace 5 años

        ¿Cual es la diferencia entre shallow y mount?

          Francisco Javier Trabol Muñoz

          Francisco Javier Trabol Muñoz

          student•
          hace 5 años

          shallow es una función de Enzyme que se utiliza para probar componentes de forma aislada, ya que no renderiza los subcomponentes.

          mount es lo contrario

          mas info https://guias.makeitreal.camp/react/testing

        David Alejandro Velázquez Villegas

        David Alejandro Velázquez Villegas

        student•
        hace 5 años

        Hola ¿Por qué El profesor uso <ProviderMock/> para el componente <Product/> si este no usa redux por dentro? de hecho hice la prueba quintándolo y los test pasaron

          Martín David Roldán

          Martín David Roldán

          student•
          hace 4 años

          El componente padre (products) depende del store de productos que se alojan en Redux. Por lo tanto a cada componente <Product /> se le pasa esta información.

          Los tests pasan ya que la data ya fue pasada a cada item y no haria falta ponerlo con el mock. Si se deberia agregar el provider al componente padre.

        mauroportellli

        mauroportellli

        student•
        hace 5 años

        Teniendo en cuenta que es costoso tener una cobertura del 100 de tus componentes. Como hacer una cobertura inteligente. Cuales son las funciones o logica de los componentes que son mas relevantes para tester? La logica mas complejas, lo que suele fallar. lo critico?

        Muy interesante esta clase

          Jaime David Burbano Montoya

          Jaime David Burbano Montoya

          student•
          hace 5 años

          Deberías tener una cobertura de lo importante. Principalmente lo relacionado con el core de negocio, y a partir de ahí, todo lo que sea fundamental para que tu aplicación, pero que no necesariamente es relacionado al core de negocio

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

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

        student•
        hace 3 años

        La verdad no estoy seguro si la prueba de simular el click sea del todo cierta o que realmente compruebe el funcionamiento del botón, me explico:

        Si comentan la linea de código donde simulan el click igual la prueba sigue siendo exitosa, de hecho cambié el número de veces que se llama la función solo para generar error y pareciera que el agregar la función al evento onClick del boton se considerara como un llamado a la función. También probe usando un expect diferente al del ejercicio. Adjunto código y outputs para verificar entre todos este caso,

        test('Test button Add to cart', () => { const handleAddToCart = jest.fn(); const wrapper = mount( <ProviderMock> <Product product={ProductMock} handleAddToCart={handleAddToCart} /> </ProviderMock>, ); //wrapper.find('button').simulate('click'); //expect(handleAddToCart).toHaveBeenCalledTimes(1); expect(handleAddToCart.mock.calls.length).toEqual(1); }); # con cualquiera de los dos expect siempre se llama una vez a la función y el test es positivo sin simular un click
        Screen Shot 2022-07-26 at 6.34.41 PM.png

        Esta salida es cuando cambio el valor a 2 para verificar cuantos llamados a la función se estan haciendo, como ven sin necesidad de simular el click, ya hay un llamado.

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

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

          student•
          hace 3 años

          Encontré lo que sucede. El problema está en el componente, si observan como el boton recibe la función esta se ejecuta automaticamente al carga el componente

          <button type="button" onClick={handleAddToCart(product)}> Comprar </button>

          Diferente a

          <button type="button" onClick={()=> handleAddToCart(product)}> Comprar </button>

          En conclusión la prueba si funciona como la vimos en clase, pero la forma en que recibe la función el componente no es la forma recomendada para instanciar la acción del boton.

          César Palma

          César Palma

          student•
          hace 3 años

          buen seguimiento ivan

        mario fernando robayo restrepo

        mario fernando robayo restrepo

        student•
        hace 4 años

        para poder realizar el curso es necesario tener las Sifuentes versiones

        "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.15.1", "jest": "^24.9.0",
        Alejandro Campuzano

        Alejandro Campuzano

        student•
        hace 4 años

        Nota El providerMock sirve para dar conexto a enzime de los keywords usados por redux en la app (como “store”). Corri un test sin provicerMock y da el siguiente error

        Could not find “store” in the context of “Connect(Header)”. Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to Connect(Header) in connect options

        Al añadir el mock evitamos este tipo de errores donde nuestra testing library podria no entender el codigo

        Deymer Hernandez

        Deymer Hernandez

        student•
        hace 4 años

        La diferencia entre shallow y mount es que shallow prueba los componentes de forma aislada de los componentes secundarios que representan, mientras que mount profundiza y prueba los elementos secundarios de un componente. En el caso de shallow, esto significa que si el componente principal representa otro componente que no se procesa, se seguirá procesando una representación superficial en el elemento principal.

        Jhon Alexander Alvarez Romero

        Jhon Alexander Alvarez Romero

        student•
        hace 6 años

        tengo este problema, alguien le paso y lo pudo resolver?

        ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `object`. 6 | describe('<Header />', () => { 7 | test('Prueba de Header', () => { > 8 | const header = shallow( | ^ 9 | <ProviderMock> 10 | <Header /> 11 | </ProviderMock>,```
          Juan Pablo Celiz

          Juan Pablo Celiz

          student•
          hace 5 años

          Hola! No me ha pasado, pero estuve averiguando y posiblemente sea que está mal exportado el componente o que no esté recibiendo las props correctas. Te dejo un artículo donde han resuelto el mismo error, suerte!