Qual è la differenza tra RSpec e Cucumber? [chiuso]


114

Ho 6 mesi di esperienza nello sviluppo di Rails. Ho creato un'applicazione web che è in uso ora con autenticazione e autorizzazione e postgresql db.

Sto passando alla mia seconda applicazione Rails ma questa volta, dopo le lezioni apprese, mi piacerebbe svilupparla usando TDD, poiché ho notato che è molto più semplice scalarla e correggere i bug. È lento da sviluppare ma a lungo andare è molto più facile da gestire.

Ho sentito parlare di Rspec e Cucumber, ma ne sono completamente confuso.

Vorrei sapere qual è la differenza tra RSpec e Cucumber e per cosa vengono utilizzati.

Sarebbe anche utile sapere se, dal punto di vista di un principiante (che è anche l'unico sviluppatore), se è davvero necessario un framework di test.


6
Per confonderti ancora di più, Minitest potrebbe anche essere un'opzione
lucas clemente

5
Capybara è davvero un driver che può essere utilizzato in qualsiasi framework di test, non un framework in sé e per sé. Watir-webdriver e Selenium sono due cose che svolgono funzioni simili, ma guidano un browser reale e sono molto più lente di Capybara che guida Rack :: Test
DVG

37
Come è questo non costruttivo ???
Jason Swett

19
Ottima domanda e ottima risposta. È proprio quello di cui avevo bisogno. Sono sconcertato dalla chiusura della questione in quanto non costruttiva. Chi se ne frega se solleverà il dibattito? Ecco a cosa serve il voto comunitario.
dpurrington

14
Votazioni per riaprire in quanto credo che le basi per chiudere la questione siano speciose. Può sicuramente essere (ed è stato!) Risposto usando "supportato da fatti, riferimenti o competenze", e qualsiasi domanda StackOverflow probabilmente "solleciterà dibattiti, argomenti, sondaggi" (che tutti conosciamo e abbiamo visto). Quanto al "sondaggio"? Il modus operandi di SO riguarda il voto positivo e negativo di domande e risposte. È fondamentalmente un grande sondaggio. Chiudere questo era stupido. È una buona domanda e risposta sull'argomento .
Adam Cameron

Risposte:


323

RSpec e Cucumber sono entrambi framework di test. RSpec include il tradizionale test unitario (che significa testare una classe o parte dell'applicazione in isolamento dal resto dell'applicazione. Quindi il tuo modello fa quello che dovrebbe fare il tuo modello, il controller fa quello che dovrebbe fare, ecc.).

RSpec e Cucumber vengono entrambi utilizzati per i test di accettazione (che si chiamano ATDD, BDD, Specifica per esempio, ecc. A seconda di chi chiedi). Si tratta di test di integrazione basati su casi aziendali, il che significa che simulano il modo in cui un utente utilizza l'applicazione e utilizza l'intero stack di Rails in modo che i problemi con il modo in cui le diverse parti della tua applicazione lavorano insieme possono essere trovati in un modo che non lo sarà il test unitario trova.

La principale differenza tra RSpec e Cucumber è il fattore di leggibilità aziendale. L'attrazione principale di Cucumber è che le specifiche (caratteristiche) sono separate dal codice di prova, quindi i proprietari dei prodotti possono fornire o rivedere le specifiche senza dover scavare nel codice. Questi sono i file .feature che crei in Cucumber. RSpec ha un meccanismo simile, ma invece descrivi un passaggio con un blocco Descrivi, Contesto o It che contiene la specifica aziendale e quindi ottieni immediatamente il codice che esegue tale istruzione. Questo approccio è un po 'più facile per gli sviluppatori con cui lavorare, ma un po' più difficile per le persone non tecniche.

Quale usare? Se sei l'unico sviluppatore e proprietario del prodotto, mi atterrei a RSpec, penso che sia più facile da capire per una persona tecnica, offre alcuni vantaggi nel mantenere le cose nell'ambito e sotto controllo e ti tengo fuori dal fare confusione con le RegEx per i test passi. Se stai costruendo questo per un cliente e sono pratici riguardo alla specifica, vai con Cucumber per il tuo test di accettazione e usa RSpec per i test unitari.

Solo per dimostrare la principale differenza tra i due:

Cetriolo:

#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

Questa serie di blog è eccellente per iniziare con RSpec.


24
Questa è un'ottima risposta. Grazie mille per il tuo tempo e i tuoi consigli. Ci sono molti libri su rotaie che ho letto, ma finora non ne ho trovato uno che faccia questo tipo di distinzioni e spieghi quale sia. Grazie ancora
banditKing

2
Non potrei raccomandare questa risposta meno a chiunque ne abbia bisogno. Grazie per i dettagli!
Ikon

3
Questa è davvero una delle risposte più complete e facili da capire su stackoverflow (completa di un ottimo esempio!)
Sheharyar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.