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.