CursosEmpresasBlogLiveConfPrecios

Pruebas unitarias con Jest: detección de anomalías y defectos

Clase 7 de 12 • Curso de Testing con Vue.js 2

Contenido del curso

Introducción

  • 1

    Pruebas en Proyectos de Software con Vue y Automatización

    01:03 min
  • 2

    Pruebas Unitarias e Integración en Desarrollo de Software

    03:29 min
  • 3

    Evolución de Pruebas de Software: De Turing a la Calidad Actual

    02:16 min
  • 4

    Preparación para pruebas de proyectos Vue con NPM y Vue Test Utils

    01:11 min

Entendiendo las pruebas

  • 5

    Pruebas de Entradas y Salidas en Componentes Vue

    01:44 min

Herramientas de desarrollo

  • 6

    Pruebas unitarias en Vue con Test Utils: Introducción práctica

    02:51 min
  • 7

    Pruebas unitarias con Jest: detección de anomalías y defectos

    Viendo ahora

Desarrollo de pruebas

  • 8

    Aplicar TDD en Vue: Desarrollo y Pruebas de Funcionalidades

    02:15 min
  • 9

    Pruebas de Software con Mocking en Aplicaciones de JavaScript

    03:05 min
  • 10

    Pruebas Unitarias con Jest y Vue Test Utils

    04:42 min
  • 11

    Pruebas Unitarias y Asíncronas en Vue con $nextTick

    03:09 min

Tips y buenas prácticas

  • 12

    Pruebas Unitarias y Mocking en Vue con Jest

    02:38 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

      Jest es una herramienta que nos ayuda a automatizar nuestras pruebas.

      El entender el problema, es el 80% de la solución.

      Hay que entender porque estamos usando Jest y como es que nos ayuda a resolver nuestro problema de pruebas.

      Existen 4 definiciones en las pruebas que nos pueden ayudar a entender mejor esto.

      Anomalía: es un comportamiento que no se espera dentro del sistema.

      Defecto: Situación que se puede reproducir y se sabe que causa problemas al sistema.

      Fallo: Incapacidad del sistema dentro de los márgenes conocidos.

      Error: acción humana que genera desperfectos en el sistema.


      Ejemplo

      Muy bonitas las definiciones, pero, ¿qué saco yo de esto?

      Pongamos este ejemplo:

      Contamos con un despertador que todas las mañanas a las 9 AM suena su alarma, pero desde hace unos días ya no lo hace, eso es una anomalía, en caso de que hubiera llegado con una manecilla rota, seria defecto, si necesita luz para funcionar y por una tormenta se nos va la luz y ya no sirve, es fallo y por último si utilizas tu despertador para que te ayude a volver con tu ex, es un error.

      Teniendo ya este panorama, Jest es una herramienta que nos ayuda a detectar anomalías o defectos, prevenir errores y minimizar los fallos de nuestro sistema.

      Cuando instalamos vue test utils instalamos jest, así que ya tenemos esto listo. Ahora saltemos directo al código.


      Anteriormente nos habíamos quedado con esto:

      import { mount } from '@vue/test-utils' import App from '@/App.vue' const wrapper = mount(App) const vm = wrapper.vm console.log(vm.$data)

      Ahora, agregaremos nuestra primera prueba con ayuda de Jest.

      Para esto, vamos a crear un nuevo archivo llamado jestTest.js a la misma altura de nuestro archivo de pruebas.

      21.png

      Dentro de este archivo vamos a escribir las siguientes funciones:

      function huevo() { return { estado: ['fresco'], color: '#000' } } function espinaca() { return { estado: 1, color: "verde" }

      Y las exportamos:

      module.exports = { huevo, espinaca };

      Luego, las importamos en nuestro archivo de pruebas con esta línea:

      import {huevo, espinaca} from "./jestTest";

      Si hemos llegado hasta aquí, lo único que falta es escribir la prueba en sí.

      Empezaremos con una función llamada describe() que recibe dos parámetros:

      • param1

      Tipo: String

      Descripción: el nombre de nuestro set de pruebas, ojo que es set de pruebas, más no la prueba en sí.

      • param2

      Tipo: Function

      Descripción: función que va a contener nuestras pruebas.

      Se ve de esta manera:

      describe('Se probará la calidad de los productos', ()=>{ //Escriba sus pruebas aquí });

      Luego seguimos con la función llamada test() que recibe dos parámetros:

      • param1

      Tipo: String

      Descripción: el nombre de nuestra prueba .

      • param2

      Tipo: Function

      Descripción: función que va a contener nuestras validaciones para que pase la prueba.

      Entonces quedaría algo así:

      test('Calidad del huevo', () => { //escriba aquí sus validaciones }); test('Calidad de la espinaca', () => { //escriba aquí sus validaciones });

      Para la parte de las pruebas, recordaremos que las pruebas unitarias, prueban piezas atómicas del código , mientras que las pruebas de integración, prueban procesos.

      Por ahora solo tenemos unas piezas atómicas, no un proceso, así que sólo haremos unas pruebas unitarias.

      Matchers

      Jest trabaja con matchers, que son meramente funciones que nos permiten probar nuestro código de diferentes maneras.

      Todos los matchers empiezan con la palabra expect así que cada vez que veas que una línea de código empieza con eso, significa que estamos accediendo a un matcher para hacer una prueba.

      Hay múltiples matchers, pero para este ejemplo solo utilizaremos dos, .toBe y .toEqual

      .toBe

      Compara valores primitivos. Utiliza la función Object.is para hacer las validaciones, la cual es mucho más confiable que un ===.

      Su sintáxis es:

      expect(coso).toBe(valorEsperado)

      Donde coso es lo que estamos probando.

      .toEqual

      Compara recursivamente los valores de las propiedades de la instancia del objeto enviado (esto se le conoce como "deep equality"). Utiliza de igual manera la función Object.is para hacer las validaciones.

      Su sintáxis es:

      expect(coso).toEqual(valorEsperado)

      Donde coso es lo que estamos probando.


      Hagamos una recapitulación de lo que hemos visto.

      • Ya sabemos que debemos tener nuestra función describe que es la que va a contener las pruebas.

      • Las validaciones para que pasen nuestras pruebas se ponen dentro de la función test().

      • Las pruebas individuales utilizan matchers para hacer sus validaciones pertinentes.

      • Vamos a usar 2 matchers para estas pruebas toBe y toEqual.

      Dicho esto, dentro de nuestra función test de los huevos, escribimos lo siguiente:

      expect(huevo().estado[0]).toBe('fresco')

      Y en la de espinaca, esto:

      expect(espinaca()).toEqual({ estado: 1, color: "verde" })

      Cuidándonos al final, así:

      describe('Se va a probar la calidad de los ingredientes',() => { test('Calidad del huevo', () => { expect(huevo().estado[0]).toBe('fresco') }); test('Calidad de la espinaca', () => { expect(espinaca()).toEqual({ estado: 1, color: "verde" }) }); })

      Y por último en nuestra terminal, nos posicionamos en la carpeta del proyecto y escribimos:

      `npm run test:unit`

      Si todo lo hicimos bien, debería de salirnos algo así:

      20.png

      Felicidades, has hecho tu primera prueba en Jest.

      Con las pruebas que acabamos de hacer, logramos comprobar la equidad sencilla de valores en los elementos y un deep equality para validar datos de tipo objeto.

      Estas son funciones que vamos a seguir ocupando y que te van a servir más adelante.

      Intenta alguna otra combinación de resultados y compártelos en los comentarios.

      Sebastián Buitrago

      Sebastián Buitrago

      student•
      hace 5 años
      Jose Daniel Barría Reyes

      Jose Daniel Barría Reyes

      student•
      hace 6 años
      Lourdes Serrano

      Lourdes Serrano

      student•
      hace 2 años
      Juan Hernandez

      Juan Hernandez

      student•
      hace 3 años
      Jose Barboza

      Jose Barboza

      student•
      hace 4 años
      Emiliano Kuyen Arturo Pacheco Montero

      Emiliano Kuyen Arturo Pacheco Montero

      student•
      hace 6 años
        Demian Arenas

        Demian Arenas

        student•
        hace 6 años
        Carlos Eduardo Gomez García

        Carlos Eduardo Gomez García

        teacher•
        hace 5 años
      Carlos Eduardo Gomez García

      Carlos Eduardo Gomez García

      teacher•
      hace 5 años
      Brayan Stiven Castaño Zuluaga

      Brayan Stiven Castaño Zuluaga

      student•
      hace 5 años

      Les recomiendo mucho instalar esta extension que les ahorra mucho codigo ya que las pruebas suelen ser repetitivas https://marketplace.visualstudio.com/items?itemName=andys8.jest-snippets

      Ademas les recomiendo escriban esto en su settings.json

      "typeAcquisition": { "include": ["jest"] }

      lo cual les ayudara a que el editor reconozca las funciones de jest

      Pd para abrir settings.json pueden hacer esto

      ctrl + shift + p

      y despues escriben json les debe aparecer esta opcion

      Captura de pantalla de 2021-05-09 09-42-30.png

      Genial la clase, aqui unas anotaciones

      describe(name, testSuite), donde name:String, testSuite:Function
      test(name, test), donde name: String, test:Function
      expect(value).matcher()

      Jest trabaja con matchers, que son meramente funciones que nos permiten probar nuestro código de diferentes maneras. Hay múltiples matchers, pero en esta clase solo utilizaremos dos, .toBe y .toEqual

      .toBe Compara valores primitivos. Utiliza la función Object.is para hacer las validaciones, la cual es mucho más confiable que un ===. .toEqual Compara recursivamente los valores de las propiedades de la instancia del objeto enviado (esto se le conoce como “deep equality”). Utiliza de igual manera la función Object.is para hacer las validaciones.

      hola compañeros necesito ayuda con esto. no consigo pasar el test me sale este error

      > test:unit

      > vue-cli-service test:unit

      FAIL tests/unit/example.spec.js

      ● Test suite failed to run

      Configuration error:

      Could not locate module @/components/HelloWorld.vue mapped as:

      C:\Users\lourd\OneDrive\Escritorio\Vuedex\src\$1.

      Please check your configuration for these entries:

      {

      "moduleNameMapper": {

      "/^@\/(.*)$/": "C:\Users\lourd\OneDrive\Escritorio\Vuedex\src\$1"

      },

      "resolver": undefined

      }

      1 | import { shallowMount } from '@vue/test-utils'

      > 2 | import HelloWorld from '@/components/HelloWorld.vue'

      | ^

      3 |

      4 | describe('HelloWorld.vue', () => {

      5 | it('renders props.msg when passed', () => {

      at createNoMappedModuleFoundError (node_modules/jest-resolve/build/resolver.js:579:17)

      at Object.<anonymous> (tests/unit/example.spec.js:2:1)

      at TestScheduler.scheduleTests (node_modules/@jest/core/build/TestScheduler.js:333:13)

      at runJest (node_modules/@jest/core/build/runJest.js:404:19)

      at _run10000 (node_modules/@jest/core/build/cli/index.js:320:7)

      at runCLI (node_modules/@jest/core/build/cli/index.js:173:3)

      Test Suites: 1 failed, 1 total

      Tests: 0 total

      Snapshots: 0 total

      Time: 0.939 s

      Ran all test suites.

      Espero que alguien me pueda ayudar a resolverlo. Gracias

      Hice el de jest de react y no comprendi tanto el sentido desde test como en este caso, debo decir que a veces un poco de lectura es buena!!

      interesante sencillo como comprobar si los resultados son los que espero

      Este tipo de prueba es para probar los valores de datos iniciales cierto? pero que utilidad tiene en un ejemplo real?, lo que se prueba ahí es info "harcodeada", no termino de entender el caso de uso de este tipo de prueba, no son valores que vengan de api o dinamicos.

      El valor del TDD es justo para verificar que el comportamiento de nuestra aplicación sea la correcta. Aunque sean datos hardcodeados, pueden mostrar casos de uso donde el sitio no responde de la manera correcta.

      Existen diversos tipos de testing, desde integración hasta unit testing.

      5 meses tarde pero... yo también me pregunte lo mismo cuando miraba los tests con Laravel, pero lo entendí y es que ese es el chiste, hardcodear, porque con esos datos que mandamos queremos que nos retorne un resultado esperado, y en este caso fue muy simple, pero de esta forma puedes evaluar una función entera y ver si esa función te está devolviendo lo que quieres que te devuelva, el testing sirve para evaluar que tus procesos están haciendo lo correcto y están devolviendo la data correcta

      Increíble, en resumen, describe nos sirve para agrupar un grupo de funciones de test, y cada test es el que hace la validación correspondiente, y para esto nos ayuda Jest, el cual se instaló al instalar Vue Test Utils:D!

      Entendido. Intenté que el test me arrojara algo nuevo y me logró indicar de manera clara lo que esperaba y lo que obtuvo.

      Se probará la calidad de los productos √ Calidad del hevo (3ms) × Calidad de la espinaca (4ms) ● Se probará la calidad de los productos › Calidad de la espinaca expect(received).toEqual(expected) // deep equality Expected: {"color": "verde", "estado": 1} Received: [{"color": "verde", "estado": 1}, {"color": 3, "estado": 2}]