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
:
Després, executem:
Un cop instal·lat, inicialitzem RSpec al nostre projecte amb:
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.
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
:
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:
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ó
# 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.
Curs de Programació en Ruby
Mòdul 1: Introducció a Ruby
Mòdul 2: Conceptes Bàsics de Ruby
Mòdul 3: Treballant amb Col·leccions
Mòdul 4: Programació Orientada a Objectes en Ruby
- Classes i Objectes
- Variables i Mètodes d'Instància
- Variables i Mètodes de Classe
- Herència
- Mòduls i Mixins
Mòdul 5: Conceptes Avançats de Ruby
- Blocs, Procs i Lambdas
- Metaprogramació
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Expressions Regulars
Mòdul 6: Introducció a Ruby on Rails
- Què és Ruby on Rails?
- Configuració de l'Entorn Rails
- Creació d'una Aplicació Simple en Rails
- Arquitectura MVC
- Rutes
Mòdul 7: Proves en Ruby
- Introducció a les Proves
- Proves Unitàries amb Minitest
- Desenvolupament Basat en Comportament amb RSpec
- Mocking i Stubbing
Mòdul 8: Millors Pràctiques en Ruby
- Estil de Codi i Convencions
- Refactorització
- Optimització del Rendiment
- Millors Pràctiques de Seguretat