Testing en el Front
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
- Testeamos comportamiento
- No testeamos implementación
- Los tests sirven como documentación

Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
- Given
- When
- Then
Sintaxis Gherkin

Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
- Given a user has entered valid email and password
- When they click the button "Sign in"
- Then the app should show the dashboard
Sintaxis Gherkin
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
- Given a user leaves the "Name" field empty
- When they try to submit the form
- Then a message should appear indicating that the field is required
Sintaxis Gherkin
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
- Given the number 4
- When the isEven function is called
- Then it should return true
Sintaxis Gherkin
Fundamentos de TypeScript
Introducción a la Programación Web
Testing en el Front
BDD
- Given the number 12.5
- When the formatPrice function is called
- Then it should return "$12.50"
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
- Jerarquía de encabezados
- Descripciones textuales
- Textos alternativos
- Elementos interactivos
- Navegación por teclado
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

Curso Testing en el Front
By mariogl
Curso Testing en el Front
- 76