RSpec et Cucumber sont tous deux des frameworks de test. RSpec inclut les tests unitaires traditionnels (ce qui signifie tester une classe ou une partie de l'application indépendamment du reste de l'application. Ainsi, votre modèle fait ce que votre modèle est censé faire, le contrôleur fait ce qu'il est censé faire, etc.).
RSpec et Cucumber sont tous deux utilisés pour les tests d'acceptation (appelés ATDD, BDD, spécification par exemple, etc. en fonction de la personne à qui vous demandez). Ce sont des tests d'intégration basés sur l'analyse de rentabilisation, ce qui signifie qu'ils simulent la façon dont un utilisateur utilise l'application et utilise la pile complète de Rails, de sorte que les problèmes liés à la façon dont les différentes parties de votre application fonctionnent ensemble peuvent être détectés d'une manière que les tests unitaires ne seront pas trouver.
La principale différence entre RSpec et Cucumber réside dans le facteur de lisibilité de l'entreprise. Le principal attrait de Cucumber est que les spécifications (fonctionnalités) sont distinctes du code de test, de sorte que vos propriétaires de produits peuvent fournir ou réviser la spécification sans avoir à fouiller dans le code. Ce sont les fichiers .feature que vous créez dans Cucumber. RSpec a un mécanisme similaire, mais à la place, vous décrivez une étape avec un bloc Description, Contexte ou It qui contient la spécification métier, puis vous disposez immédiatement du code qui exécute cette instruction. Cette approche est un peu plus facile à utiliser pour les développeurs, mais un peu plus difficile pour les non-techniciens.
Lequel utiliser? Si vous êtes le seul développeur et propriétaire du produit, alors je m'en tiendrai à RSpec, je pense que c'est plus facile pour un technicien à comprendre, offre quelques avantages pour garder les choses cadrées et sous contrôle, et vous éviter de jouer avec RegExs pour le test pas. Si vous construisez ceci pour un client et qu'il maîtrise la spécification, utilisez Cucumber pour votre test d'acceptation et utilisez RSpec pour les tests unitaires.
Juste pour démontrer la principale différence entre les deux:
Concombre:
#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
Cette série de blogs est excellente pour démarrer avec RSpec.