Rails RSpec Postavljanje

RSpec je sjajan alat za testiranje aplikacija Rails. To je izuzetno popularan BDD-orijentisani ( Behavior Driven Development) okvir za testiranje u Rubi zajednici.

To čini pisanje testova jednostavnijim, izražajnijim i lakšim za održavanje!

Početak

Prvo, moraćete da instalirate RSpec, ali takođe će vam trebati i Database Cleaner da biste pomogli da se stvari drže zajedno i obezbedi čisto stanje tokom testova. Dodajte sledeće gemove u :test i :development grupe u svoj Gemfile, a zatim pokrenite bundle install:

group :development, :test do
  gem "database_cleaner"
  gem "rspec-rails"
end

Veoma je često koristiti RSpec zajedno sa Capybarom da biste poboljšali razvoj testiranja.

Konfigurisanje RSpec

Pre nego što započnete sa pisanjem svojih RSpec testova, moraćete da se pokrenete rails generate rspec:install. Ovo će stvoriti sledeće datoteke:

create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb

Datoteke kao što su, spec_helper.rb i rails_helper.rb sadrže podrazumevani RSpec postavljen sa puno komentara. To se snažno preporučuno da pročitate sve ove komentare da dobro razumete šta svaka opcija radi.

spec_helper.rb

Datoteka spec_helper.rb koristi se za konfigurisanje RSpec-a. Osnovna datoteka za konfiguraciju, nakon što je prokomentarisala neke korisne opcije konfiguracije, napisana je na sledeći način:

RSpec.configure do |config|
  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end

  config.shared_context_metadata_behavior = :apply_to_host_groups
  config.filter_run_when_matching :focus
  config.disable_monkey_patching!
  
  if config.files_to_run.one?
    config.default_formatter = "doc"
  end
  
  config.profile_examples = 10
  
  config.order = :random
  Kernel.srand config.seed
end
  • expectations.include_chain_clauses_in_custom_matcher_descriptions = true- Lančana metoda omogućava da prilagođeni opisi podudaranja i poruke o greškama uključuju tekst za pomoćne metode.
  • mocks.verify_partial_doubles = true- Djelomični dupli sprečavaju vas da zaustavite bilo koje metode koje već ne postoje na objektu, a tipografski potvrđuje vaše ruganje.
  • config.shared_context_metadata_behavior = :apply_to_host_groups- Deljeni kontekstni metapodaci konfigurišu kako RSpec tretira metapodatke prosleđene kao deo deljene primera definicije grupe.
  • filter_run_when_matching- Pokretanje filtera kada se podudara omogućava vam da ograničite spec. Izvođenje na pojedinačne primere ili grupe koje ste označili :focusmetapodacima.
  • disable_monkey_patching!- Sprečava RSpec od krpanja majmuna, čini da se objekti ponašaju na testovima kao što bi se ponašali u „stvarnom“ životu.
  • default_formatter- Podrazumevani formatter postavlja podrazumevani format vaših rspec testova koji će se koristiti ako nije postavljen nijedan oblikovač.
  • config.profile_examples- Primeri profila ispisuju najsporije primere i primere grupa na kraju izvođenja specifikacija, ali to usporava vaš paket
  • config.order = :random i Kernel.srand config.seed- konfigurišite testove za pokretanje nasumičnim redosledom . Ovo pomaže da svaki test ostane nezavisan jedan od drugog.

rails_helper.rb

Datoteka rails_helper.rb se koristi za specifikacije koje zavise od sistema Rails (uglavnom testovi modela i kontrolera , ali takođe i za skoro svaki deo projekta Rails).
rails_helper.rb zahteva da spec_helper.rb radi.

require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'

ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_spec_type_from_file_location!
  config.filter_rails_from_backtrace!
end
  • fixture_path- Uređaj datoteke je uobičajena datoteka koja se podrazumevano čuva u specifikacijama / ugradbama.
  • use_transactional_fixtures- Transakcioni uređaji omogućavaju da zapisi stvoreni za jedan test budu vidljivi za sledeći test.
  • infer_spec_type_from_file_location!- Omogućava automatsko označavanje specifikacija u direktorijumima sa odgovarajućim metapodacima tipa, tako da imaju na raspolaganju odgovarajuće pomoćnike.
  • filter_rails_from_backtrace!- Backtrace filtriranje se koristi za filtriranje linija u backtraceovima koji dolaze iz Rails dragulja kako bi se smanjio šum u izlazu neuspeha testa.

Konfigurisanje čistača baze podataka

Konfigurisanjem Čistača baze podataka u svojoj aplikaciji osiguravate da testovi započinju u čistom stanju. Jedino što treba da uradite je da dodate sledeće u svoj RSpec.configure blok u rails_helper.rb:

config.before(:suite) do
  DatabaseCleaner.clean_with(:truncation)
end

Kako pokrenuti testove?

Jednom kada se sve konfiguriše, spremni ste za rad! Postoje četiri načina za pokretanje testa:

  • Sve na jednom: bundle exec rspec.
    Ovo pokreće sve vaše testove.
  • Jedan RSpec paket: bundle exec rspec ./spec/models
    Ovo pokreće sve specifikacije modela.
  • Jedan RSPEC fajl u isto vreme: bundle exec rspec ./spec/models/story_spec.rb.
    Ovo pokreće samo testove u Stori modelu.
  • Jedno po jedno: bundle exec rspec ./spec/models/story_spec.rb:10
    Ovo pokreće samo testove na liniji 10 u Stori modelu.

Na isti način, možete da pokrenete testove na svom kontroleru .

Biti pažljiv! Što je više testova, to je duže potrebno za njihovu sastavljanje. Pokrenite testove samo za ono što vam zaista treba!

Nadamo se da vam je ovaj članak pomogao da pokrenete testove! Da biste saznali više o našim budućim člancima RSpec, pretplatite se na naš bilten!