En aquest tema, aprendrem com compartir dades entre diferents passos en un escenari de Cucumber. Aquesta habilitat és essencial per mantenir els nostres escenaris nets i evitar la duplicació de codi. A més, ens permet reutilitzar informació entre passos, cosa que és especialment útil quan treballem amb dades que es generen o es modifiquen durant l'execució dels escenaris.
Conceptes clau
- Variables d'instància: Utilitzar variables d'instància dins de les definicions de passos per emmagatzemar dades que es poden compartir entre diferents passos.
 - Context compartit: Crear un objecte de context que pugui ser utilitzat per emmagatzemar i recuperar dades entre passos.
 - Hooks: Utilitzar hooks per inicialitzar o netejar dades compartides abans o després de l'execució dels escenaris.
 
Exemples pràctics
Utilitzant variables d'instància
Les variables d'instància són una manera senzilla de compartir dades entre passos dins de la mateixa classe de definició de passos.
class MyStepDefinitions
  # Variable d'instància per emmagatzemar dades
  @shared_data = nil
  Given('he creat un usuari') do
    @shared_data = { user: 'John Doe' }
  end
  When('l'usuari inicia sessió') do
    puts "Iniciant sessió per #{@shared_data[:user]}"
    # Aquí podríem afegir codi per simular l'inici de sessió
  end
  Then('l'usuari hauria de veure la seva pàgina de perfil') do
    puts "Verificant la pàgina de perfil per #{@shared_data[:user]}"
    # Aquí podríem afegir codi per verificar la pàgina de perfil
  end
endUtilitzant un context compartit
Un context compartit és un objecte que pot ser utilitzat per emmagatzemar dades que necessiten ser accessibles des de diferents classes de definició de passos.
class SharedContext
  attr_accessor :data
  def initialize
    @data = {}
  end
end
# Inicialitzem el context compartit
Before do
  @context = SharedContext.new
end
Given('he creat un usuari') do
  @context.data[:user] = 'John Doe'
end
When('l'usuari inicia sessió') do
  puts "Iniciant sessió per #{@context.data[:user]}"
end
Then('l'usuari hauria de veure la seva pàgina de perfil') do
  puts "Verificant la pàgina de perfil per #{@context.data[:user]}"
endExercicis pràctics
Exercici 1: Compartir dades amb variables d'instància
- Crea un escenari on un usuari afegeix un producte al carret de la compra.
 - Utilitza variables d'instància per emmagatzemar el nom del producte i comprova que el producte apareix al carret.
 
Solució de l'Exercici 1
class ShoppingCartSteps
  @product_name = nil
  Given('he afegit un producte al carret') do
    @product_name = 'Laptop'
    puts "Producte afegit: #{@product_name}"
  end
  Then('el carret hauria de contenir el producte') do
    puts "Verificant el carret per #{@product_name}"
    # Aquí podríem afegir codi per verificar el carret
  end
endConclusió
Compartir dades entre passos és una tècnica poderosa que ens permet mantenir els nostres escenaris organitzats i eficients. Hem vist com utilitzar variables d'instància i contextos compartits per aconseguir-ho. A mesura que avancem en el curs, aquestes tècniques seran fonamentals per escriure escenaris més complexos i realistes. En el següent mòdul, explorarem tècniques avançades de Gherkin per millorar encara més els nostres escenaris.
BDD amb Cucumber i Gherkin
Mòdul 1: Introducció al BDD
Mòdul 2: Començar amb Cucumber
- Configuració de l'entorn
 - Creació del teu primer projecte Cucumber
 - Comprensió dels fitxers de característiques
 
Mòdul 3: Escriure escenaris Gherkin
Mòdul 4: Definicions de passos
Mòdul 5: Tècniques avançades de Gherkin
Mòdul 6: Integració de Cucumber amb el desenvolupament
- Integració amb la integració contínua
 - Utilitzant Cucumber amb diferents llenguatges
 - Millors pràctiques per al BDD en equips
 
Mòdul 7: Funcions avançades de Cucumber
Mòdul 8: Aplicacions reals del BDD
- Estudi de cas: BDD en una aplicació web
 - Estudi de cas: BDD en una arquitectura de microserveis
 - Reptes i solucions en el BDD
 
