En este tema, aprenderemos cómo compartir datos entre diferentes pasos en un escenario de Cucumber. Esta habilidad es crucial para mantener la coherencia y la reutilización de datos a lo largo de un escenario, especialmente cuando los pasos dependen de los resultados de pasos anteriores.
Conceptos Clave
-
Contexto de Escenario:
- Cucumber proporciona un objeto de contexto que se puede utilizar para almacenar y compartir datos entre pasos.
- Este objeto es específico para cada escenario, lo que significa que los datos no se comparten entre diferentes escenarios.
-
Variables de Instancia:
- En los lenguajes orientados a objetos, las variables de instancia pueden ser utilizadas para almacenar datos que deben ser accesibles por múltiples métodos (pasos).
-
Dependencias de Datos:
- Asegúrate de que los pasos que dependen de datos compartidos se ejecuten en el orden correcto.
Ejemplo Práctico
Supongamos que estamos probando una aplicación de gestión de usuarios. Queremos crear un usuario y luego verificar que el usuario ha sido creado correctamente.
Archivo de Características (Gherkin)
Feature: Gestión de Usuarios Scenario: Crear y verificar un nuevo usuario Given un nuevo usuario con nombre "Juan" y email "[email protected]" When creo el usuario Then el usuario "Juan" debería existir en el sistema
Definiciones de Pasos (Ruby)
class UserSteps attr_accessor :user Given('un nuevo usuario con nombre {string} y email {string}') do |name, email| @user = { name: name, email: email } end When('creo el usuario') do # Simulación de creación de usuario Database.create_user(@user) end Then('el usuario {string} debería existir en el sistema') do |name| user_in_db = Database.find_user_by_name(name) expect(user_in_db).not_to be_nil expect(user_in_db[:email]).to eq(@user[:email]) end end
Explicación del Código
- Variables de Instancia: Utilizamos
@user
como una variable de instancia para almacenar los datos del usuario. Esto permite que los datos sean accesibles en todos los métodos de la claseUserSteps
. - Creación y Verificación: En el primer paso, creamos un nuevo usuario y almacenamos sus datos en
@user
. En el segundo paso, utilizamos estos datos para crear el usuario en la base de datos simulada. Finalmente, en el tercer paso, verificamos que el usuario existe en la base de datos y que su email coincide con el esperado.
Ejercicio Práctico
Ejercicio
Modifica el escenario anterior para incluir un paso adicional que actualice el email del usuario y verifique que el cambio se ha realizado correctamente.
Solución
Archivo de Características (Gherkin)
Scenario: Crear, actualizar y verificar un nuevo usuario Given un nuevo usuario con nombre "Juan" y email "[email protected]" When creo el usuario And actualizo el email del usuario a "[email protected]" Then el usuario "Juan" debería existir en el sistema con email "[email protected]"
Definiciones de Pasos (Ruby)
When('actualizo el email del usuario a {string}') do |new_email| @user[:email] = new_email Database.update_user_email(@user[:name], new_email) end Then('el usuario {string} debería existir en el sistema con email {string}') do |name, email| user_in_db = Database.find_user_by_name(name) expect(user_in_db).not_to be_nil expect(user_in_db[:email]).to eq(email) end
Retroalimentación
- Error Común: Olvidar actualizar la variable de instancia
@user
después de cambiar el email. Esto puede llevar a fallos en la verificación final. - Consejo: Siempre asegúrate de que las variables de instancia reflejen el estado actual de los datos que estás probando.
Conclusión
Compartir datos entre pasos es una técnica esencial en BDD con Cucumber. Al utilizar variables de instancia o contextos de escenario, puedes mantener la coherencia de los datos y facilitar la escritura de escenarios complejos. En el siguiente módulo, exploraremos técnicas avanzadas de Gherkin para mejorar aún más tus habilidades en BDD.
BDD con Cucumber y Gherkin
Módulo 1: Introducción a BDD
Módulo 2: Comenzando con Cucumber
- Configuración del Entorno
- Creando Tu Primer Proyecto Cucumber
- Entendiendo los Archivos de Características
Módulo 3: Escribiendo Escenarios Gherkin
Módulo 4: Definiciones de Pasos
Módulo 5: Técnicas Avanzadas de Gherkin
Módulo 6: Integrando Cucumber con el Desarrollo
- Integración con Integración Continua
- Usando Cucumber con Diferentes Lenguajes
- Mejores Prácticas para BDD en Equipos
Módulo 7: Características Avanzadas de Cucumber
Módulo 8: Aplicaciones de BDD en el Mundo Real
- Estudio de Caso: BDD en una Aplicación Web
- Estudio de Caso: BDD en una Arquitectura de Microservicios
- Desafíos y Soluciones en BDD