El Desenvolupament Basat en Comportament (BDD) és una metodologia de desenvolupament de programari que se centra en la col·laboració entre desenvolupadors, QA i no tècnics o stakeholders. RSpec és una de les eines més populars per implementar BDD en Ruby. En aquesta secció, aprendrem a utilitzar RSpec per escriure proves que descriguin el comportament esperat del nostre codi.

Què és RSpec?

RSpec és un framework de proves per a Ruby que permet escriure proves llegibles i expressives. Amb RSpec, podem descriure el comportament del nostre codi de manera clara i concisa.

Instal·lació de RSpec

Per començar a utilitzar RSpec, primer hem d'instal·lar-lo. Podem afegir RSpec al nostre projecte Ruby afegint la següent línia al nostre Gemfile:

gem 'rspec'

Després, executem:

bundle install

Un cop instal·lat, inicialitzem RSpec al nostre projecte amb:

bundle exec rspec --init

Això crearà els fitxers necessaris per començar a escriure proves amb RSpec.

Estructura d'una Prova amb RSpec

Una prova amb RSpec es compon de diversos blocs que descriuen el comportament esperat del codi. Aquests blocs inclouen describe, context i it.

Blocs describe i context

El bloc describe s'utilitza per agrupar proves relacionades amb una classe o mètode específic. El bloc context s'utilitza per agrupar proves sota condicions específiques.

describe 'Calculator' do
  context 'when adding numbers' do
    # Proves aquí
  end
end

Bloc it

El bloc it s'utilitza per descriure un comportament específic que esperem del nostre codi.

describe 'Calculator' do
  context 'when adding numbers' do
    it 'returns the sum of two numbers' do
      # Prova aquí
    end
  end
end

Exemple Pràctic

Anem a veure un exemple pràctic de com escriure proves amb RSpec per a una classe Calculator.

Implementació de la Classe Calculator

Primer, implementem la classe Calculator:

class Calculator
  def add(a, b)
    a + b
  end

  def subtract(a, b)
    a - b
  end
end

Escrivint Proves amb RSpec

Ara, escrivim les proves per a la classe Calculator:

# spec/calculator_spec.rb
require 'calculator'

describe Calculator do
  describe '#add' do
    it 'returns the sum of two numbers' do
      calculator = Calculator.new
      result = calculator.add(5, 3)
      expect(result).to eq(8)
    end
  end

  describe '#subtract' do
    it 'returns the difference of two numbers' do
      calculator = Calculator.new
      result = calculator.subtract(5, 3)
      expect(result).to eq(2)
    end
  end
end

Executant les Proves

Per executar les proves, simplement executem:

bundle exec rspec

Exercicis Pràctics

Exercici 1

Implementa una classe Multiplier amb un mètode multiply que multipliqui dos números. Escriu les proves corresponents amb RSpec.

Solució

# multiplier.rb
class Multiplier
  def multiply(a, b)
    a * b
  end
end
# spec/multiplier_spec.rb
require 'multiplier'

describe Multiplier do
  describe '#multiply' do
    it 'returns the product of two numbers' do
      multiplier = Multiplier.new
      result = multiplier.multiply(5, 3)
      expect(result).to eq(15)
    end
  end
end

Exercici 2

Implementa una classe Divider amb un mètode divide que divideixi dos números. Escriu les proves corresponents amb RSpec, incloent una prova per assegurar-te que no es pot dividir per zero.

Solució

# divider.rb
class Divider
  def divide(a, b)
    raise ArgumentError, 'Cannot divide by zero' if b == 0
    a / b
  end
end
# spec/divider_spec.rb
require 'divider'

describe Divider do
  describe '#divide' do
    it 'returns the quotient of two numbers' do
      divider = Divider.new
      result = divider.divide(6, 3)
      expect(result).to eq(2)
    end

    it 'raises an error when dividing by zero' do
      divider = Divider.new
      expect { divider.divide(6, 0) }.to raise_error(ArgumentError, 'Cannot divide by zero')
    end
  end
end

Resum

En aquesta secció, hem après què és RSpec i com utilitzar-lo per escriure proves que descriguin el comportament esperat del nostre codi. Hem vist com estructurar les proves amb els blocs describe, context i it, i hem practicat escrivint proves per a diverses classes. Amb aquestes habilitats, estem preparats per aplicar el Desenvolupament Basat en Comportament als nostres projectes Ruby.

© Copyright 2024. Tots els drets reservats