2012-08-01 28 views
91

Mam 6 miesięcy doświadczenia w tworzeniu Rails. Stworzyłem aplikację sieciową, która jest obecnie używana z uwierzytelnianiem i autoryzacją oraz bazą danych Postgresql.Jaka jest różnica między RSpec i Cucumber?

Przechodzę do mojej drugiej aplikacji Rails, ale tym razem, po lekcji, chciałbym ją rozwinąć za pomocą TDD, ponieważ zauważyłem, że jest to znacznie łatwiejsze do skalowania i naprawiania błędów. Rozwój ten jest powolny, ale na dłuższą metę jego rozwiązanie jest łatwiejsze.

Słyszałem o Rspecu i ogórku, ale jestem całkowicie zdezorientowany.

Chciałbym wiedzieć, jaka jest różnica między RSpec i Cucumber i do czego są one używane.

Przydałoby się również wiedzieć, czy z punktu widzenia początkującego (który jest również jedynym programistą), czy struktura testowa jest rzeczywiście potrzebna.

+4

Aby wprowadzić Cię w błąd, Minitest może być także opcją –

+2

lub nawet kapibara –

+5

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

Odpowiedz

269

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

+15

To jest doskonała odpowiedź. Dziękuję bardzo za poświęcony czas i radę. Jest wiele książek na temat szyn, które czytałem, ale jak dotąd nie znalazłem takiego, który dokonuje tego rodzaju rozróżnień i wyjaśnia, który jest który. Jeszcze raz dziękuję – banditKing

+1

Nie mogłem polecić tej odpowiedzi tym mniej osobom potrzebującym. Dziękuję za szczegóły! – Ikon

+1

To jest rzeczywiście jedna z najbardziej wszechstronnych i łatwych do zrozumienia odpowiedzi na stackoverflow (wraz z doskonałym przykładem!) – Sheharyar

Powiązane problemy