Jaka jest różnica między RSpec a Cucumber? [Zamknięte]

114

Mam 6 miesięcy doświadczenia w programowaniu Rails. Zbudowałem aplikację internetową, która jest obecnie używana z uwierzytelnianiem i autoryzacją oraz bazą danych postgresql.

Przechodzę do mojej drugiej aplikacji Railsowej, ale tym razem, po wyciągnięciu lekcji, chciałbym ją rozwinąć za pomocą TDD, ponieważ zauważyłem, że jest o wiele łatwiej skalować i naprawiać błędy. Rozwija się powoli, ale na dłuższą metę jest znacznie łatwiejszy w obsłudze.

Słyszałem o Rspec i Cucumber, ale jestem przez nie całkowicie zdezorientowany.

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

Przydałoby się również wiedzieć, czy z perspektywy początkującego (który jest jedynym programistą), czy framework testowy jest naprawdę potrzebny.

bandytaKing
źródło
6
Aby jeszcze bardziej zmylić Cię, Minitest może być również opcją
lucas clemente
5
Kapibara jest tak naprawdę sterownikiem, którego można używać w dowolnym frameworku testowym, a nie we frameworku. Watir-webdriver i Selenium to dwie rzeczy, które wykonują podobne funkcje, ale obsługują prawdziwą przeglądarkę i są znacznie wolniejsze niż Capybara driving Rack :: Test
DVG
37
Dlaczego to nie jest konstruktywne ???
Jason Swett
19
Świetne pytanie i świetna odpowiedź. Właśnie tego potrzebowałem. Jestem zdumiony zamknięciem pytania jako niekonstruktywnym. Kogo obchodzi, czy będzie to zabiegać o debatę? Po to jest głosowanie w społeczności.
dpurrington
14
Głosowanie za ponownym otwarciem, ponieważ uważam, że podstawy do zamknięcia pytania są zwodnicze. Zdecydowanie można (i udzielono!) Odpowiedzi, używając „popartych faktami, referencjami lub ekspertyzą”, a każde pytanie StackOverflow prawdopodobnie „będzie prawdopodobnie wymagało debaty, argumentów, ankiet” (które wszyscy znamy i widzieliśmy). A co z „pollingiem”? The who modus operandi SO polega na głosowaniu za i przeciw pytaniom i odpowiedziom. To w zasadzie jedna wielka ankieta. Zamknięcie tego było głupie. To dobre, pomocne, na temat pytania i odpowiedzi.
Adam Cameron

Odpowiedzi:

323

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.

DVG
źródło
24
To doskonała odpowiedź. Dziękuję bardzo za poświęcony czas i radę. Czytałem wiele książek na torach, ale jak dotąd nie znalazłem takiej, która czyni takie rozróżnienia i wyjaśnia, która jest która.
Jeszcze
2
Nie mógłbym tym bardziej polecić tej odpowiedzi nikomu w potrzebie. Dziękuję za szczegóły!
Ikon
3
To jest rzeczywiście jedna z najbardziej wszechstronnych i łatwych do zrozumienia odpowiedzi na temat stackoverflow (wraz ze świetnym przykładem!)
Sheharyar