Fundamentos de TypeScript
Testing en el Front
Fundamentos de TypeScript
Testing en el Front
Mario González
Developer desde 2001
Formador desde 2017
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
¿Qué es testear?
Fundamentos de TypeScript
Introducción a la Programación Web
Testear:
Probar que lo que hemos construido funciona bien
Verificar que el comportamiento de lo que hemos construido es el esperado
Testing en el Front
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
¿Qué es una User Interface?
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
La User Interface es la parte de nuestra aplicación con la que interactúan los usuarios
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
La User Interface es la parte de nuestra aplicación con la que interactúan los usuarios
La User Interface es la parte de nuestra aplicación con la que interactúan TODOS los usuarios
a11y
accessibility
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
¿Para qué testeamos?
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
CONFIANZA
Si algo no hace lo que se espera que haga,
los tests avisarán
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Tests que no aportan confianza
- Tests frágiles (brittle tests)
- Tests inestables (flaky tests)
- Tests que comprueban muchas cosas
- Tests redundantes
- Tests que comprueban lo trivial
- Falsos positivos
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Tests que no aportan confianza
- Tests frágiles (brittle tests)
Cuando el usuario hace clic en el segundo botón, le lleva al carrito de la compra
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Tests que no aportan confianza
- Tests inestables (flaky tests)
Cuando se invoca la función getRandomNumber, el número devuelto es menor a 10
Cuando se accede a la app, el usuario está desconectado
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Tests que no aportan confianza
- Tests que comprueban muchas cosas
Al completar el formulario y pulsar "comprar", debería validar todos los campos, mostrar un resumen del pedido, cobrar al usuario, vaciar el carrito, redirigir a la pantalla de gracias
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Tests que no aportan confianza
- Tests redundantes
Al pasarle un 3 y un 6 a la función multiplyNumbers, ésta me devuelve un 18
Al pasarle un 2 y un 8 a la función multiplyNumbers, ésta me devuelve un 16
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Tests que no aportan confianza
- Falsos positivos
Espero que la clase de este elemento sea "customer-active"
Espero que la función addNumbers me devuelva un número
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Behaviour Driven Development
BDD
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
Sintaxis Gherkin
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
Sintaxis Gherkin
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
Sintaxis Gherkin
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
Sintaxis Gherkin
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
Sintaxis Gherkin
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Tipos de tests
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Test unitario
Al aplicar presión de gas,
la longitud del pistón aumenta 20cm
1. Mido la longitud del pistón
2. Aplico presión de gas
3. Mido la longitud del pistón
4. Espero que la longitud del pistón sea 20cm mayor que la inicial
spec
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Test de integración
Al accionar la palanca, el asiento sube 18cm
1. Mido la distancia del asiento al suelo
2. Tiro de la palanca
3. Mido la distancia del asiento al suelo
4. Espero que la distancia del asiento al suelo sea 18cm mayor que la inicial
spec
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Test end to end
Un usuario de 80kg se sienta, acciona la palanca y sube 15cm
1. Mido la altura de los ojos
2. El usuario tira de la palanca
3. Mido la altura de los ojos
4. Espero que la altura de los ojos sea 15cm mayor que la inicial
spec
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Test manual
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Kent C. Dodds
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Kent C. Dodds
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Estructura de un test
la longitud del pistón es 5cm
cuando le meto presión con gas durante dos segundos
espero que la longitud del pistón sea 25
1
2
3
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Estructura de un test
tengo un 3 y un 5
cuando invoco a la función addTwoNumbers pasándole esos dos valores
espero que me devuelva un 8
1
2
3
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Estructura de un test
cuando invoco a la función addTwoNumbers pasándole esos dos valores
espero que me devuelva un 8
1
2
3
Arrange
}
Act
}
Assert
}
A
A
A
tengo un 3 y un 5
Given
When
Then
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Estructura de un test
const number1 = 3;
const number2 = 5;
const sum = addTwoNumbers(number1, number2);
if (sum === 8) {
console.log('✅ Test passes')
} else {
console.error('❌ Test fails')
}
// Arrange
const number1 = 3;
const number2 = 5;
// Act
const sum = addTwoNumbers(number1, number2);
// Assert
if (sum === 8) {
console.log('✅ Test passes')
} else {
console.error('❌ Test fails')
}
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Estructura de un test
const number1 = 3;
const number2 = 5;
const sum = addTwoNumbers(number1, number2);
expect(sum).toBe(8);
// Arrange
const number1 = 3;
const number2 = 5;
// Act
const sum = addTwoNumbers(number1, number2);
// Assert
expect(sum).toBe(8);
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Frameworks de testing
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Testear la UI
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Testear la UI
Test de componente
Test E2E
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Test de componente
¿Cuál es el comportamiento esperado de un componente?
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Test de componente
Mostrarle datos
al usuario
Recibir órdenes del usuario
comportamiento esperado de un componente:
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Mostrarle datos
al usuario
Cuando el componente Price recibe un 12, debería mostrar el texto "12.00€"
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Mostrarle datos
al usuario
Cuando el componente StatusBadge recibe un status true, debería mostrar el texto "active"
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Mostrarle datos
al usuario
Cuando el componente ServiceCard recibe el servicio de envío gratuito, debería mostrar "Free Shipping" en un encabezado
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Mostrarle datos
al usuario
Cuando el componente ServiceCard recibe el servicio "Free Shipping", debería mostrar el texto "Price: 0.00€"
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Recibir órdenes del usuario
Cuando el componente Switch recibe un status "off" y el usuario hace clic en el switch, se debería mostrar el texto "ON"
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Recibir órdenes del usuario
Cuando el componente CreateCustomer se renderiza y el usuario hace clic en el botón "create", aparece un texto "Customer created successfully"
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Recibir órdenes del usuario
Cuando el componente Counter está mostrando un 0 y el usuario hace clic en el botón "+", debería mostrar un 1
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
a11y
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
interfaces de usuario accesibles
para todo el mundo
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Accesibilidad que podemos testear:
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Jerarquía de encabezados
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Descripciones textuales
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Textos alternativos
Un gato naranja recostado plácidamente en una hamaca junto al mar, con una copa de daiquiri entre las patas, bajo un cielo despejado y frente a una playa de arena blanca.
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Elementos interactivos
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Navegación por teclado
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
tests que no testean el comportamiento
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
tests que no testean el comportamiento
cuando se renderiza el componente ServiceCard, el precio antiguo debería aparecer en rojo
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
tests que no testean el comportamiento
cuando se renderiza el componente ContactForm y el usuario rellena el tercer campo, el botón con clase "submit" debería activarse
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
tests que no testean el comportamiento
cuando se renderiza el componente ContactPage, debería mostrarse "Contáctanos" en negrita
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
tests que no testean el comportamiento
cuando se renderiza el componente Navigation y el usuario está en la home, el link "Home" debería aparecer subrayado
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
Testing Library