RSpec i Cucumber to obie platformy testujące. RSpec obejmuje tradycyjne testowanie jednostek (co oznacza testowanie klasy lub jej części w oderwaniu od reszty aplikacji, więc twój model robi to, co twój model ma robić, kontroler robi to, co powinien, itp.).
Zarówno RSpec, jak i Cucumber są używane do testów akceptacyjnych (co jest nazywane ATDD, BDD, specyfikacja przez przykład itp. W zależności od tego, kogo pytasz). Są to testy integracji oparte na uzasadnionych biznesie, które oznaczają symulację sposobu, w jaki użytkownik korzysta z aplikacji i używa pełnego stosu Railsów, więc problemy związane ze współpracą różnych części aplikacji można znaleźć w taki sposób, że testy jednostkowe nie będą odnaleźć.
Główna różnica między RSpec i ogórkiem to współczynnik czytelności biznesowej. Główną zaletą ogórka jest to, że specyfikacja (funkcje) są oddzielone od kodu testowego, więc właściciele produktów mogą dostarczyć lub przejrzeć specyfikację bez konieczności przeglądania kodu. Są to pliki .feature, które tworzysz w Cucumber. RSpec ma podobny mechanizm, ale zamiast tego opisujesz krok z blokiem Describe, Context lub It, który zawiera specyfikację biznesową, a następnie natychmiast otrzymasz kod, który wykonuje to polecenie. Takie podejście jest nieco łatwiejsze dla programistów, ale trudniejsze dla osób nietechnicznych.
Które użyć? Jeśli jesteś jedynym deweloperem i właścicielem produktu, to trzymałbym się RSPec, czuję, że jest to łatwiejsze do zrozumienia dla osoby technicznej, oferuje kilka korzyści w utrzymywaniu rzeczy w zasięgu i pod kontrolą, i powstrzymuje cię od kłopotów z RegExs dla testu kroki. Jeśli budujesz to dla klienta, i są one praktyczne w odniesieniu do Specyfikacji, idź z Ogórkiem do Testu Akceptacji i użyj RSpec do Testów Jednostkowych.
Wystarczy wykazać Główną różnicą między tymi dwoma:
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 jest doskonała na uzyskanie dzieje z RSpec: http://everydayrails.com/2012/03/12/testing-series-intro.html
Aby wprowadzić Cię w błąd, Minitest może być także opcją –
lub nawet kapibara –
Kapibara jest tak naprawdę sterownikiem, który może być użyty w dowolnej strukturze testowej, a nie w samej strukturze.Watir-webdriver i Selenium to dwie rzeczy, które wykonują podobne funkcje, ale napędzają prawdziwą przeglądarkę i są o wiele wolniejsze niż Capybara Driving Rack :: Test – DVG