RSpec i Cucumber to platformy testowe. RSpec zawiera tradycyjne testy jednostkowe (co oznacza testowanie klasy lub części aplikacji w oderwaniu od reszty aplikacji. Tak więc twój model robi to, co powinien robić twój model, kontroler robi to, co powinien, itd.).
RSpec i Cucumber są używane do testów akceptacyjnych (które nazywa się ATDD, BDD, specyfikacja według przykładu itp. W zależności od tego, kogo zapytasz). Są to testy integracji oparte na przypadkach biznesowych, co oznacza, że symulują sposób, w jaki użytkownik korzysta z aplikacji i korzysta z pełnego stosu Railsów, dzięki czemu można wykryć problemy ze sposobem, w jaki różne części aplikacji współpracują ze sobą w sposób uniemożliwiający testowanie jednostkowe. odnaleźć.
Główną różnicą między RSpec a Cucumber jest współczynnik czytelności biznesowej. Główną zaletą ogórka jest to, że specyfikacja (funkcje) są oddzielne od kodu testowego, więc właściciele produktów mogą dostarczyć lub przejrzeć specyfikację bez konieczności przekopywania się przez kod. To są pliki .feature, które tworzysz w Cucumber. RSpec ma podobny mechanizm, ale zamiast tego opisujesz krok za pomocą bloku Opis, Kontekst lub To, który zawiera specyfikację biznesową, a następnie natychmiast masz kod, który wykonuje tę instrukcję. Takie podejście jest trochę łatwiejsze dla programistów, ale trochę trudniejsze dla osób nietechnicznych.
Którego użyć? Jeśli jesteś jedynym deweloperem i właścicielem produktu, to trzymałbym się RSpec, uważam, że jest to łatwiejsze do zrozumienia dla osoby technicznej, oferuje kilka zalet w utrzymywaniu zakresu i kontroli oraz pozwala uniknąć mieszania się z RegExami do testów kroki. Jeśli budujesz to dla klienta i jest on praktyczny w zakresie specyfikacji, przejdź do testu akceptacji z ogórkiem i użyj RSpec do testów jednostkowych.
Aby pokazać główną różnicę między nimi:
Ogórek:
#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"
#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
FactoryGirl.create(:article, title: title)
end
When /^I visit the list of articles$/ do
visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
page.should have_content title
end
Rspec
describe "Articles" do
let(:article) { FactoryGirl.create(:article) }
context "Index Page" do
before { visit articles_path }
it { page.should have_content article.title }
end
end
Ta seria blogów doskonale nadaje się do rozpoczęcia korzystania z RSpec.