CursosEmpresasBlogLiveConfPrecios

Aplicar TDD en Vue: Desarrollo y Pruebas de Funcionalidades

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

    02:51 min
  • 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

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

      Para aplicar TDD en Vue hay que entender primero qué es TDD y entender que se puede aplicar a cualquier desarrollo de software.

      Siempre he dicho que el ejemplo es la madre de todas las enseñanzas y la práctica el padre. Así que vamos a agregar la funcionalidad a nuestro proyecto de que, cada vez que le den click al botón, cambie un elemento de data y se le sume 1 a su valor.

      TDD o Test-Driven Development es un paradigma de desarrollo que consiste en cinco etapas.

      DIAGRAMA DE LAS FASES

      DiagramaClase8.png

      1) Escribir la prueba

      En esta primera etapa lo que se hace es, en el archivo de pruebas se piensa en cómo se debe comportar la aplicación con la nueva feature (requisito nuevo) que se va a integrar.

      Y con eso en mente se debe de crear la prueba.

      Con lo que comentamos anteriormente, vamos a escribir nuestra prueba.

      Empezamos pensando en la funcionalidad. Requerimos cambiar una propiedad de data cada vez que demos click al botón.

      Entonces la prueba debe de primero probar que se hizo click.

      Para esto, usaremos dos métodos de Vue Test Utils:

      • find()

      Recibe un string o un componente y regresa el primer elemento que encuentra con ese selector.

      • trigger()

      Lanza un evento del elemento que se seleccionó.

      Recibe un string con el nombre del evento.

      Estos métodos los vamos a usar para simular un click en nuestro botón, de la siguiente manera.

      wrapper.find('button').trigger('click')

      Ya que simulamos el botón, solo hay que comprobar que se le sumó 1 al anterior valor, entonces vamos a guardar el valor anterior y compararlo con el valor después del click, resultando en esto.

      describe('Probar que se cambió la propiedad changeTest ', () => { test('should click a button', () => { const lastValue = wrapper.vm.changeTest wrapper.find('button').trigger('click') expect(wrapper.vm.changeTest).toBe(lastValue+1) }) })

      Listo.

      2) La prueba falla

      El siguiente paso es ver que la prueba falle y ver que se necesita hacer para que pase.

      Cuando corremos la prueba, esto es lo que nos sale.

      18.png

      Así que lo que sigue es escribir el código para que esto no pase.

      3) Escribir código

      El primer error que notamos es que trata de buscar un elemento de data() que no existe, entonces crearemos el elemento.

      Como es un tipo number, vamos a inicializarlo con algún número.

      17.png

      Lo siguiente es hacer que el valor si cambie cada vez que le damos un click. Para ellos debemos agregar una línea de código a nuestra funcion setData()

      16.png

      4) Pasar prueba

      Ahora debemos ver si en realidad pasamos la prueba, así que corremos nuestras pruebas.

      En efecto, con eso es suficiente.

      15.png

      5) Refactor de código

      El último paso sería checar si nuestra implementación de la solución puede mejorarse, en caso de que no habremos terminado de añadir esa feature a nuestro código.

      Puedes hacer eso con absolutamente todas las features que desees.

      Esta forma de trabajar nos obliga a cumplir con un estándar no solamente cuando estamos haciendo código, sino también cuando estamos planeando como hacerlo.


      ¿Qué otra feature se te ocurre que le podamos agregar al proyecto de esta manera? Pónlo en los comentarios.

      Comentarios

        Eduardo Pech

        Eduardo Pech

        student•
        hace 5 años

        No se entiende muy bien el codigo, por lo que tuve que investigar de otros lados. Les comparto como quedo. example.spec.js

        import { shallowMount } from "@vue/test-utils"; import Example from "@/components/Example.vue"; describe("Probar que se cambió la propiedad changeTest ", () => { test("should click a button", () => { const wrapper = shallowMount(Hola); const lastValue = wrapper.vm.changeTest; wrapper.find("button").trigger("click"); expect(wrapper.vm.changeTest).toBe(lastValue + 1); }); });

        Example.vue

        <template> <div> <button @click="updateTest">Click to change</button> </div> </template> <script> export default { name: "Hola", data() { return { changeTest: 0, }; }, methods: { updateTest() { this.changeTest += 1; }, }, }; </script>

        Luego ir a terminal y poner

        yarn run test:unit

        Espero que les haya funcionado.

          Juan Hernandez

          Juan Hernandez

          student•
          hace 3 años

          Excelente ejemplo, sisn embargo el codigo de ejemplo creo que funciona para el componente App.vue, aparentemente parece igual el codigo pero todo se enfoca en el chagesTest: 0 a definir en el data, y en colocar en la funcion setData ya creada la asignacion de este valor que es el atributo al que se hace referencia en el test

        Carlos Eduardo Gomez García

        Carlos Eduardo Gomez García

        teacher•
        hace 5 años

        También quiero dejar mi aporte a una manera más sencilla de explicar el TDD:

        Básicamente Test Driven Development significa "Desarrollo Guiado por Pruebas" (literal, eso significa en español), y consiste en que primero programas la prueba y esperas a que te de un error, con base en ese error tu lo solucionas a través de código, y así hasta que hagas que esa prueba pase, con esto encapsulamos los 4 primeros conceptos.

        El último concepto, que es el de refactorizado, nos ayuda a mejorar la calidad de nuestro código, es decir, buscar áreas de mejora y aplicarlas, por ejemplo, podemos reducir la cantidad de lineas de código de una función, refactorizar toda una clase, etc. Pero siempre procurando que el output final siempre sea el esperado, y es por eso que nuestras pruebas nos dirán si el código después de ese refactorizado aún funciona correctamente.

        Vamos, te quitas el miedo y el estrés de pensar: "Ay pero es que si le muevo aquí y ya no funciona después... no, no, no yo este código no lo toco ahí se queda"

          Arlex Felipe Llanos Betancourt

          Arlex Felipe Llanos Betancourt

          student•
          hace 5 años

          Es interesante saber esto, muchas veces el código termina llegando después de las pruebas, algo totalmente diferente en muchas ocasiones cuando nos enseñan a programar y se crean esos miedos de "¿funciona?, déjelo quieto" 😅🤣

        Iván Antonio Bustos Calderón

        Iván Antonio Bustos Calderón

        student•
        hace 5 años

        Pienso que esto no es un curso, es un manual. No está a la altura de los otros cursos que he tomado. Los contenidos no son malos, pero leer todo en un fondo oscuro con letras blancas es incómodo. Además, cuando algo no funciona, cuesta ver donde está el detalle. Lo bueno es que alguien más ya tuvo el problema y aporta rápidamente para solucionarlo, pero no debería ser ese el fin del curso. Los contenidos de Vue en Platzi son algo pobres y creo que deben mejorar partiendo por este curso y hacerlo con videos como corresponde.

        Jose Daniel Barría Reyes

        Jose Daniel Barría Reyes

        student•
        hace 6 años

        Las funciones que utilizamos

        find(string o component) regresa el primer elemento con ese selector
        trigger(event) lanza un evento del elemento que se selecciono
        //ejemplo wrapper.find('button').trigger('click')
        Eric Gomez

        Eric Gomez

        student•
        hace 5 años

        La explicación del punto 3 no es muy clara: 3) Escribir código

        Pero a lo que se refiere es modificar el archivo App.vue verificar si existe data() y agregar agregar

        this.changeTest += 1 en setData

        setData (data) { try { this.changeTest += 1
        Carlos Rosado

        Carlos Rosado

        student•
        hace 5 años

        Falta mas claridad en el curso ya que con lo que se mensiona no es posible hacer el proceso.

        Jose Barboza

        Jose Barboza

        student•
        hace 4 años

        para que funcione lo puse asi:

        import { mount } from '@vue/test-utils' import Example from "@/components/Example.vue" const wrapper = mount(Example) const vm = wrapper.vm describe('Probar la propiedad changeTest', () => { test("should click a button", () => { const lastValue = wrapper.vm.changeTest; wrapper.find('button').trigger('click') expect(wrapper.vm.changeTest).toBe(lastValue + 1); }); });

        Example.vue

        <template> <div> <button @click="updateTest">Click to change</button> </div> </template> <script> export default { name: "Hola", data() { return { changeTest: 0, }; }, methods: { updateTest() { this.changeTest += 1; }, }, }; </script>
        Juan Manuel Robledo

        Juan Manuel Robledo

        student•
        hace 5 años

        En la parte 3) Escribir código: ir al archivo App.vue y agregar en el objeto data changeTest: 0 y en la parte de los methods existe una función setData que solamente hay que agregar la linea this.changeTest += 1;

        <code> data () { return { changeTest: 0, } }, methods: { setData(data) { this.changeTest += 1; } }

        Recién ahí cuando en la terminal corres el comando npm run test:unit va a salir el resultado esperado.

        Wilson Alexander Rueda Garcia

        Wilson Alexander Rueda Garcia

        student•
        hace 5 años

        para que funcione tenemos que declarar la const wrapper que hace referencia al mount del componente App

        import App from '@/App.vue' import { mount } from '@vue/test-utils' const wrapper = mount(App) describe('Probar que se cambio la propieda changeTest', () => { test('should click a button', () => { const lastValue = wrapper.vm.changeTest; wrapper.find('button').trigger('click') expect(wrapper.vm.changeTest).toBe(lastValue+1) }) })
        Carlos Eduardo Gomez García

        Carlos Eduardo Gomez García

        teacher•
        hace 5 años

        Increíble, esto es una de las cosas que me gustan del TDD, que primero haces la prueba y luego el código, y es lo que comentaba en una lectura anterior, que realmente hacer las pruebas hasta el final es tedioso, así que esto es genial. Aunque es raro, aquí se mencionan 5 etapas pero en otros cursos solo se mencionan 3, pero realmente son lo mismo, digamos que en los otros cursos obviaron la parte de "Ver la prueba fallar" y "Escribir el código"