CursosEmpresasBlogLiveConfPrecios

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

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

    Pruebas en Proyectos de Software con Vue y Automatización

    01:03 min
  • 2
    Pruebas Unitarias e Integración en Desarrollo de Software

    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

    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

    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

    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

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

    Viendo ahora
  • 7
    Pruebas unitarias con Jest: detección de anomalías y defectos

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

    03:55 min

Desarrollo de pruebas

  • 8
    Aplicar TDD en Vue: Desarrollo y Pruebas de Funcionalidades

    Aplicar TDD en Vue: Desarrollo y Pruebas de Funcionalidades

    02:15 min
  • 9
    Pruebas de Software con Mocking en Aplicaciones de JavaScript

    Pruebas de Software con Mocking en Aplicaciones de JavaScript

    03:05 min
  • 10
    Pruebas Unitarias con Jest y Vue Test Utils

    Pruebas Unitarias con Jest y Vue Test Utils

    04:42 min
  • 11
    Pruebas Unitarias y Asíncronas en Vue con $nextTick

    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

    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

      Como los masters en programación que somos, sabemos que todo el tiempo se están creando nuevas herramientas que nos ayudan a desarrollar mejor software de la mejor manera.

      Ejemplos de estas herramientas son el mismo Vue. Este framework está basado en unas APIs nativas de Webcomponents, pero son muy engorrosas de usar, ya que debemos conocer ampliamente la manera en la que se crean los elementos con la función CustomElements y aún hay navegadores que no las soportan aún.

      Por esto Vue Test Utils llegó como la librería oficial de Vue para hacer testing, así que ahora la pregunta que nos debemos hacer es, ¿qué es lo que hace más fácil Vue Test Utils?

      Para responder esa pregunta debemos entender el ciclo de vida de un componente de Vue.

      Diagrama de ciclo de vida

      DiagramaClase6.png

      En el código que nos descargó en example.spec.js, del repositorio que estamos usando para este curso:

      24.png

      Vamos a borrar todo su contenido y empezar a escribir lo necesario para nuestras pruebas.


      Iniciamos escribiendo esto al inicio del documento:

      import { mount } from '@vue/test-utils'

      Con esta línea lo que estamos haciendo es importar mount de la librería de test-utils. Y, ¿qué hace exactamente?

      mount es una función que recibe dos parámetros,

      • El primer parámetro es un objeto de tipo Component {Componente} Component

      • El segundo es un objeto también, pero este objeto va a ser de tipo opciones, y funciona como inicializador del componente que vamos a probar.

      {Opciones} Options

      Siguiendo con el código, lo que necesitamos sería importar nuestro componente:

      import App from '@/App.vue'

      Para después hacer un wrapper de este:

      const wrapper = mount(App)

      Pondremos un console.log(wrapper) al final, para ver que contiene nuestro objeto:

      Nuestro código debe quedar así:

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

      Para correr las pruebas utilizamos el comando npm run test:unit en nuestra terminal.

      Si hemos llegado hasta aquí debemos de ver algo como esto.

      22.png

      El que tengamos pruebas fallidas, significa que aún no tenemos ninguna sentencia que corroborar, y es correcto, por ahora solamente tenemos un wrapper de nuestro componente, el cual se ve de la siguiente manera:

      23.png

      Propiedades de los Wrapper

      Un Wrapper contiene un elemento llamado vm, el cual es la instancia de Vue de la cual estamos haciendo el Wrapper.

      Para comprobar esto, vamos a agregar la siguiente línea de código, en el mismo archivo que estamos usando:

      const vm = wrapper.vm

      Sobre ese elemento vamos a acceder a muchas propiedades de esta instancia, de la siguiente manera:

      • vm.$data

      Tipo: Object

      Descripción: este elemento es la propiedad data donde están nuestros estados.

      • vm.$props

      Tipo: Object

      Descripción: estas son las propiedades que recibe el componente.

      • vm.$el

      Tipo: Element

      Descripción: el elemento raíz del DOM, el cual está manejando Vue.

      • vm.$children

      Tipo: Array < Vue instance >

      Descripción: Array de las instancias de los nodos hijos del componente de la instancia.

      Si queremos probar cualquiera de las siguientes propiedades, solamente debemos de ponerlo en el console.log(vm.$data)

      19.png

      En el caso anterior, esto es lo que debe de salir


      Hasta ahora nuestro código debe estar de esta manera.

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

      Y nos han estado saliendo varios errores, de que no pasa las pruebas. Por ahora no hay nada de qué preocuparse, estamos revisando las herramientas que nos otorga Test Utils, aún no estamos poniendo ninguna prueba, por lo cual no pueden ser exitosas.

      Hay que tener presente que esto sólo corre en modo de desarrollo,

      no está afectando directamente nuestro código, así que el que nos salgan errores, no significa que es en nuestro código.

      Más adelante revisaremos más funciones de Vue Test Utils, si quieres verlas más a profundidad, este link a la documentación te puede ayudar.


      Si hay alguna propiedad de la instancia de Vue que no conocías hasta revisar esto, escribela en los comentarios.

      En la siguiente clase aprenderás a usar Jest, una herramienta muy útil para la creación de pruebas en Vue.

      Comentarios

        Jose Daniel Barría Reyes

        Jose Daniel Barría Reyes

        student•
        hace 6 años

        Funcion mount, recibe un componente y options

        mount(Component, opts)
        vm = Component, es la instancia de Vue
        vm.$data = Object, este elemento es la priopiedad data donde estan nuestro estado
        vm.$props = Object, son las props que recibe el component
        vm.$el = Element, el elemneto raiz del DOM, el cual esta manejando Vue
        vm.$children = Array<Vue instance> = Array de las instancias de los nodos hijos del componente.
          Cristhian Mauricio Yara Pardo

          Cristhian Mauricio Yara Pardo

          student•
          hace 5 años

          Gracias!!!

        Josafat Morales Toledo

        Josafat Morales Toledo

        student•
        hace 5 años

        que es un Wrapper??

          Axel Vasquez

          Axel Vasquez

          student•
          hace 5 años

          Hola. La palabra wrapper significa "envoltura" en ingles y se le dice así a las funciones que llamaran a otra agregando funcionalidades, usualmente se devuelve un "acceso" al wrapper para poder manipular esas funciones extra.

          En este caso el wrapper está envolviendo el componente para poder hacer testing fácilmente.

        Sebastián Buitrago

        Sebastián Buitrago

        student•
        hace 5 años

        Para no tener que correr el comando

        npm run test:unit

        cada vez que quieren ver el resultado de las pruebas pueden agregar esta configuracion el package.json en la linea 8 donde esta esto

        "test:unit": "vue-cli-service test:unit",

        cambiarlo por esto

        "test:unit": "vue-cli-service test:unit --watch",
          Sebastián Buitrago

          Sebastián Buitrago

          student•
          hace 5 años

          Para que esto les corra los test automaticamente deben guardar el archivo despues de cada cambio

        Usuario anónimo

        Usuario anónimo

        user•
        hace 6 años

        Excelente, ¿Me habré perdido de una clase?, lo pregunto porque se mencionó que partiendo de un código que se descargo previamente desde el repo del proyecto del curso, pero en ningun momento he visto que iniciaramos o clonaramos dicho repositorio en nuestro entorno local, si alguien me corrige mil gracias.

          Erasmo Hernández

          Erasmo Hernández

          teacher•
          hace 5 años

          Sí lo tiene https://platzi.com/clases/1950-testing-vuejs/29278-que-necesito-para-probar-mi-proyecto-de-vue/ En esta clase está el detalle del repo y lo que debes instalar.

        Jorge Domínguez

        Jorge Domínguez

        student•
        hace 6 años

        Cómo podría aplicar esto pero usando Nuxt?

          Fernando Mellone

          Fernando Mellone

          student•
          hace 5 años

          Este articulo te podría interesar 😁

        Brayan Stiven Castaño Zuluaga

        Brayan Stiven Castaño Zuluaga

        student•
        hace 5 años

        vm es un mundo desconocido, vi mucha propiedades interesantes que me dan curiosidad, como por ejemplo _renderProxy, _self o $root. Excelente clase.

        Carlos Eduardo Gomez García

        Carlos Eduardo Gomez García

        teacher•
        hace 5 años

        Increíble, la única propiedad que no conocía era la de $children jaja

        Básicamente lo que hacemos es importar mount y nuestro componente, el cual nos devolverá un wrapper y ese wrapper contiene una instancia de Vue de nuestro componente el cual nos ayudará a correr las pruebas