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

  1. 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.
  2. 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).
  3. 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 clase UserSteps.
  • 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.

© Copyright 2024. Todos los derechos reservados