👽
3ntr0 Apuntes
  • 📚Principios SOLID y Clean Code
    • 💲Deuda Técnica
    • 📌Mejorar Nombres
      • 📄Nombre según Tipo
      • 🚗Nombre Clases
      • ⚙️Nombres Funciones
    • ☑️Mejorar Funciones
    • ➿Principio DRY
    • 🧼Clean Code en Clases (POO)
      • 📘 Principio de Responsabilidad Única (SRP)
    • 🤮🇸 🇹 🇺 🇵 🇮 🇩 - Code Smells
      • 🚫Singleton
      • 🙏Tight Coupling
      • 🥸U P I D
      • 🚩Más Code Smells
  • 💕Angular
    • 🏍️Standalone
    • 🆚ngClass vs [class.clase]
    • 🩻Directivas
    • 🚩ElementRef
    • 🎀Decoradores
      • @HostListener
    • 🔄OnChanges
    • 🧪Testing - Jasmine y Karma
      • 🚀Módulo 1: Introducción a las pruebas unitarias
      • 🧫Módulo 2: Introducción a Jasmine
      • ⚒️Módulo 3: Introducción a Karma
      • 🔬Módulo 4: Pruebas unitarias en Angular
        • Código comentado Paso a Paso
      • 🕵️‍♂️Módulo 5: Técnicas avanzadas en Jasmine
      • 📚Módulo 6: Técnicas avanzadas en Karma
  • 🖼️HTML y CSS
    • 🖌️Custom Properties
    • Trucos
    • Brakepoints
  • 🧋Javascript
    • 🛠️Funciones
    • 📦Arrays
      • Every y Some
      • Map
      • Reduce
    • 😎Hoisting
    • 🪚Desestructuración
    • 🛻Programación Asincrona
      • 📞Callbacks
      • 🌟Promises
      • 🆚Promise.all Y Promise.any
      • 🚀Async/Await
    • Respuestas HTTP
    • 🧐Dudas Básicas
      • NodeList
      • 🧐Contextos de .this
      • 💭Parametro Rest
      • 🗨️arguments
      • 🙀JavaScript no tiene clases
      • 🆚Null vs Undefined
      • 🔎Operador in
      • 🟨Operador Spread
      • ❓Encadenamiento Opcional
      • 🔲Notación de Corchetes
      • ⛓️Coalescencia Nula (??)
      • 🆚Shallow Copy vs Deep Copy
      • 🆚.json VS JSON.parse
      • ⚙️Fetch wrapper
      • Sets
      • Maps
  • 📒Terminología
    • 💎Esenciales
    • Web
    • Javascript
  • 🌐GIT
    • Source Tree
  • 🧬React
    • 🫂Babel
  • 🔧 Fundamentos de C#
    • 🎛️General
      • 🧐Diferencia Equals y ==
      • 🧐Diferencia entre typeof y .GetType()
      • 📐Convenciones de Nomenclatura
    • 💠Summary
    • 📇.resx
    • 📄Strings
      • ⛓️Comparación de cadenas
    • 🧲Regex
    • 📦POO
      • 🚙Clases
        • ✏️Clase String
        • 📥Métodos de Acceso
        • ⚗️Métodos de Extensión
    • 🖇️Pattern Matching
    • 🚩Excepciones
    • Programación Asíncrona
    • 🔎LINQ
      • 🅿️PLINQ
  • 🌐 Desarrollo Web con ASP.NET
    • 🧬Modelos
      • 🗒️Data Annotations
        • 📑Lista
        • 🧪Atributos
          • 🛠️Atributos Personalizados
          • 🧰AttributeUsage
          • 📥Acceso a los atributos
        • 📚Documentación
    • 👷Servicios
      • ⭐Servicios Singleton
    • ⏳Sesiones
      • 🧭Temp Data
    • DbContext
      • 🔄Eager Loading
    • 🥽Manejo de Datos
      • 🗃️Archivos
        • 📤Subida de Archivos
        • ✏️Leer y Escribir
        • 🕓Manejo de Archivos Temporales
        • 🛡️Validación de Archivos en ASP.NET Core
      • Colecciones
        • 🪜Pila (Stack)
        • 🏇Cola (Queue)
      • 🩻Manejo de XMLs
        • 📂XmlDocument
          • 🎯XPath
        • 🧿XmlReader
    • ❤️Tips y Utilities
      • 🟰StringComparison
    • 🧰Debug Tools
      • 🧭Stopwatch
  • 🚀Razor
    • 🧱Configuración de Proyecto
    • 📃Pages
      • 🔸Método OnGet
      • 🔸Carpeta Models
      • 🔸Partial Pages
    • 🎨Layouts
      • Aplicar CSS A UNA PAGE
    • 🚴‍♂️Routing
    • 🏢_ViewImports
    • ✒️Sintaxis Razor
      • 😀Introducción
      • 📔Expresiones Implícitas
      • 📕Expresiones Explícitas
      • ✍️Renderizar Texto
      • 🧑‍🔬Class Page Model
      • 🔖Tag Helpers
        • 🔹asp-page
        • 🔹asp-append-version
        • 🔹asp-for
        • 🔹asp-items
        • 🔹asp-action y asp-controller
  • 🔮LUA
    • 🎯Fundamentos
    • ⌨️Entrada por Consola
    • 🔗Estructuras de Control
    • ⚒️Funciones
    • 📦Tablas
    • 📚Funciones y Librerías Estándar
    • 🦖POO
Con tecnología de GitBook
En esta página
  1. Angular
  2. Testing - Jasmine y Karma

Módulo 1: Introducción a las pruebas unitarias

📚 1.1. ¿Qué son las pruebas unitarias?

Las pruebas unitarias son una técnica para validar que las partes individuales del código (generalmente funciones o métodos) funcionen correctamente de manera aislada. Cada prueba se enfoca en una pequeña unidad de código, y su objetivo es asegurar que dicha unidad devuelva los resultados esperados para un conjunto específico de entradas.

Las pruebas unitarias son fundamentales porque permiten identificar y corregir errores de manera temprana en el ciclo de desarrollo, antes de que los módulos interactúen entre sí.

🧩 1.2. Importancia de las pruebas en desarrollo de software

Escribir pruebas unitarias es una práctica clave en el desarrollo de software de calidad, ya que:

  • Aumentan la confianza en el código. Con pruebas, sabes que los cambios no rompen funcionalidades existentes.

  • Facilitan el mantenimiento y la refactorización, ya que puedes modificar el código con la seguridad de que cualquier error será detectado de inmediato.

  • Documentan el comportamiento esperado de las unidades de código, sirviendo como una referencia sobre cómo deberían funcionar los módulos individuales.

  • Ahorro de tiempo en la detección de errores durante fases posteriores del proyecto, como en las pruebas de integración o en producción.

🧪 1.3. Tipos de pruebas: Unitarias, Integración, E2E

  • Pruebas unitarias: Se centran en probar partes individuales del código (funciones, métodos, componentes). Son rápidas y eficientes porque se ejecutan en aislamiento, sin dependencias externas.

  • Pruebas de integración: Validan cómo interactúan diferentes módulos o componentes del sistema. Este tipo de pruebas asegura que las piezas del código funcionen correctamente juntas.

  • Pruebas End-to-End (E2E): Simulan el flujo de usuario en una aplicación. Verifican que el sistema completo funcione como se espera desde la perspectiva del usuario, probando desde la interfaz hasta el backend.

🔄 1.4. Introducción a TDD (Test Driven Development)

El Desarrollo Guiado por Pruebas (TDD) es una metodología en la cual las pruebas se escriben antes de implementar el código funcional. El ciclo de trabajo en TDD sigue tres pasos:

  1. Escribir una prueba que falle: Antes de escribir cualquier código, defines una prueba basada en lo que quieres que haga el nuevo código.

  2. Escribir el código mínimo necesario para pasar la prueba: Se implementa la funcionalidad mínima que haga pasar la prueba.

  3. Refactorizar el código: Una vez que la prueba pasa, se mejora el código para hacerlo más limpio, eficiente o mantenible, asegurando que la prueba siga pasando.

TDD ayuda a mantener un código robusto, donde las pruebas actúan como una red de seguridad ante futuras modificaciones.

🛠️ 1.5. Herramientas para pruebas en Angular: Jasmine y Karma

  • Jasmine: Es un framework de pruebas para JavaScript, utilizado ampliamente en proyectos Angular para escribir pruebas unitarias. Jasmine proporciona una sintaxis clara y expresiva para definir expectativas sobre el comportamiento del código, y cuenta con "matchers" (validadores) para comprobar resultados.

  • Karma: Es un test runner o ejecutor de pruebas. Karma se encarga de ejecutar las pruebas escritas con Jasmine en diferentes navegadores, ya sea de manera local o en un entorno de integración continua (CI). Karma proporciona reportes detallados sobre el estado de las pruebas y ayuda a depurar cualquier error que ocurra durante la ejecución.


Ejemplo de una prueba simple con Jasmine

// Definimos una suite de pruebas para el módulo de operaciones matemáticas
describe('Pruebas de suma', () => {

  // Definimos una prueba individual para la suma de dos números
  it('debería sumar dos números correctamente', () => {
    const resultado: number = 2 + 3;  // Definimos el tipo de resultado como número

    // Verificamos que el resultado sea 5 usando el matcher toBe()
    expect(resultado).toBe(5);  // Esperamos que 2 + 3 sea igual a 5
  });
});

En este ejemplo, creamos una prueba básica usando Jasmine. El bloque describe() agrupa un conjunto de pruebas relacionadas, en este caso, para la función de suma. Dentro de describe(), usamos el bloque it() para definir una prueba individual. La expectativa (expect()) verifica si el resultado de la suma es el esperado. Si el valor devuelto es 5, la prueba pasa; de lo contrario, fallará

AnteriorTesting - Jasmine y KarmaSiguienteMódulo 2: Introducción a Jasmine

Última actualización hace 9 meses

💕
🧪
🚀