2012-08-01 11 views
91

Ho 6 mesi di esperienza nello sviluppo di Rails. Ho creato un'applicazione web attualmente in uso con autenticazione e autorizzazione e db postgresql.Qual è la differenza tra RSpec e Cucumber?

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

Ho sentito parlare di Rspec e Cetriolo ma sono completamente confuso da loro.

Mi piacerebbe sapere qual è la differenza tra RSpec e Cucumber e per cosa sono utilizzati.

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

+4

Per confonderti ancora di più, Minitest potrebbe anche essere un'opzione –

+2

o anche capibara –

+5

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

risposta

269

RSpec e Cetriolo sono entrambi framework di test. RSpec include il test unitario tradizionale (che significa testare una classe o parte dell'applicazione separatamente dal resto dell'applicazione, quindi il tuo modello fa ciò che dovrebbe fare il tuo modello, il controllore fa quello che dovrebbe fare, ecc.).

RSpec e Cetriolo entrambi sono utilizzati per il test di accettazione (che è chiamato ATDD, BDD, specifica per esempio, ecc. A seconda di chi si chiede). Si tratta di test di integrazione basati sui business case, il che significa che simulano il modo in cui un utente utilizza l'applicazione e utilizza lo stack Rails completo, quindi i problemi con il modo in cui le diverse parti della vostra applicazione lavorano insieme possono essere trovati in un modo trova.

La principale differenza tra RSpec e Cucumber è il fattore di leggibilità aziendale. L'estrazione principale di Cucumber è che le specifiche (caratteristiche) sono separate dal codice di prova, in modo che i proprietari dei prodotti possano fornire o rivedere le specifiche senza dover scavare nel codice. Questi sono i file .feature che componi in Cucumber. RSpec ha un meccanismo simile, ma invece descrivi un passo con un blocco Describe, Context o It che contiene le specifiche di business, e quindi immediatamente il codice che esegue quella dichiarazione. Questo approccio è un po 'più semplice per gli sviluppatori, ma un po' più difficile per i non tecnici.

Quale usare? Se sei l'unico sviluppatore e proprietario del prodotto, allora mi associo a RSpec, ritengo che sia più semplice da comprendere per una persona tecnica, offre alcuni vantaggi nel tenere le cose sotto controllo e sotto controllo e ti impedisce di fare scherzi con RegExs per il test passi. Se stai costruendo questo per un cliente, e sono pratici per quanto riguarda la specifica, vai con Cucumber per il test di accettazione e usa RSpec per i test unitari.

Giusto per dimostrare la differenza principale 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 su come ottenere andare con RSpec: http://everydayrails.com/2012/03/12/testing-series-intro.html

+15

Questa è una risposta eccellente. 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 è quale. Grazie ancora – banditKing

+1

Non potrei raccomandare questa risposta a chi ne ha bisogno. Grazie per i dettagli! – Ikon

+1

Questa è davvero una delle risposte più complete e facili da capire su StackOverflow (completa di un ottimo esempio!) – Sheharyar

Problemi correlati