rspecAan de slag met rspec


Opmerkingen

RSpec is een BDD-tool voor het specificeren en testen van Ruby-programma's. Het wordt hoofdzakelijk gebruikt om klassen en methoden te specificeren en te testen, dwz voor het testen van eenheden.

De rspec-edelsteen is slechts een meta-edelsteen die de drie delen van RSpec binnenbrengt. Deze drie delen zijn ook een manier om deze documentatie te structureren.

  • rspec-core biedt RSpec manier van structureren en uitvoeren van tests: de rspec command-line executable, het describe , context en it methoden, gemeenschappelijke voorbeelden, etc. Het is gedocumenteerd in de RSpec Core onderwerp .
  • rspec-verwachtingen biedt ondersteuning RSpec's voor de te verwachten testresultaten: de expect / to verwachting syntaxis en RSpec ingebouwde matchers. (Het biedt ook de verouderde should verwachting syntax.) Het is gedocumenteerd in de RSpec Expectations onderwerp .
  • rspec-mocks biedt RSpec-ondersteuning voor testdubbels : double , allow , expect , receive , hebben have_received , enz. Het is gedocumenteerd in het onderwerp RSpec Mocks .

Er is ook de rspec-rails edelsteen, die RSpec uitbreidt met ondersteuning voor het testen van de soorten klassen die worden gebruikt in Rails-applicaties, en met ondersteuning voor het schrijven van functiespecificaties (acceptatietests) die de applicatie testen vanuit het oogpunt van de gebruiker.

Officiële documentatie voor RSpec en rspec-rails is hier: https://www.relishapp.com/rspec

Een eenvoudig RSpec-voorbeeld

In greeter.rb (waar dat ook gaat in uw project):

class Greeter
  def greet
    "Hello, world!"
  end
end
 

In spec / greeter_spec.rb:

require_relative '../greeter.rb'

RSpec.describe Greeter do
  describe '#greet' do
    it "says hello" do
      expect(Greeter.new.greet).to eq("Hello, world!")
    end
  end
end
 

Onze bestandsstructuur ziet er dus uit als:

$ tree .
.
├── greeter.rb
└── spec
    └── greeter_spec.rb

1 directory, 2 files
 

uitgang

$rspec greeter_spec.rb
Finished in 0.00063 seconds (files took 0.06514 seconds to load)
1 example, 0 failures
 

In RSpec-terminologie is het bestand een "spec" van Greeter en is het it blok een "voorbeeld". De lijn met expect is een verwachting. Als aan de verwachting wordt voldaan, gebeurt er niets en is de test geslaagd. Zo niet, dan mislukt de test.

Dit voorbeeld laat ook zien dat blokken describe kunnen worden genest, in dit geval om aan te geven dat de greet deel uitmaakt van de Greet klasse. De # in #greet is slechts een conventie om te laten zien dat greet een instantiemethode is (in tegenstelling tot '.' Voor een klassemethode). RSpec niet de string interpreteren helemaal niet, dus je moet een andere snaar of weglaten die zou kunnen gebruiken describe blokkeren geheel.

RSpec installeren

De meest gebruikelijke manier om het RSpec-juweel te installeren, is met behulp van Bundler . Voeg deze regel toe aan de Gemfile van uw toepassing:

gem 'rspec'
 

En voer vervolgens een bundle uit om de afhankelijkheden te installeren:

$ bundle
 

Als alternatief kunt u de edelsteen handmatig installeren:

$ gem install rspec
 

Voer na het installeren van de edelsteen de volgende opdracht uit:

rspec --init
 

Hiermee maakt u een spec map voor uw tests, samen met de volgende configuratiebestanden:

  • een spec map waarin u spec-bestanden kunt plaatsen
  • een spec/spec_helper.rb bestand met standaard configuratie-opties
  • een .rspec bestand met standaard opdrachtregelvlaggen