Quelle est la différence entre RSpec et Cucumber? [fermé]

114

J'ai 6 mois d'expérience dans le développement de Rails. J'ai créé une application Web qui est actuellement utilisée avec authentification et autorisation et postgresql db.

Je passe à ma deuxième application Rails mais cette fois, après les leçons apprises, j'aimerais la développer en utilisant TDD, car j'ai remarqué qu'il était beaucoup plus facile de la mettre à l'échelle et de corriger les bogues. Il est lent à se développer mais à long terme, il est beaucoup plus facile à gérer.

J'ai entendu parler de Rspec et de concombre mais je suis complètement confus par eux.

Je voudrais savoir quelle est la différence entre RSpec et Cucumber et à quoi ils servent.

Il serait également utile de savoir si, du point de vue d'un débutant (qui est également le seul développeur), si un cadre de test est vraiment nécessaire.

banditKing
la source
6
Pour vous embrouiller encore plus, Minitest pourrait également être une option
lucas clemente
5
Capybara est vraiment un pilote qui peut être utilisé dans n'importe quel framework de test, pas un framework en lui-même. Watir-webdriver et Selenium sont deux choses qui font des fonctions similaires, mais pilotent un vrai navigateur et sont beaucoup plus lentes que Capybara Driving Rack :: Test
DVG
37
En quoi n'est-ce pas constructif ???
Jason Swett
19
Excellente question et excellente réponse. C'est juste ce dont j'avais besoin. Je suis déconcerté par la conclusion de la question comme non constructive. Qui se soucie si cela suscite un débat? C'est à cela que sert le vote communautaire.
dpurrington
14
Voter pour rouvrir car je pense que la base pour clore la question est spécieuse. Il peut certainement être (et a été!) Répondu en utilisant "soutenu par des faits, des références ou une expertise", et toute question de StackOverflow "suscitera probablement un débat, des arguments, des sondages" (ce que nous connaissons et avons tous vu). Quant au «sondage»? Le modus operandi de l'OS consiste à voter pour et contre les questions et réponses. C'est essentiellement un grand sondage. Clôturer cela était stupide. C'est une question et une réponse utiles sur le sujet .
Adam Cameron

Réponses:

323

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.

DVG
la source
24
C'est une excellente réponse. Merci beaucoup pour votre temps et vos conseils. Il y a beaucoup de livres sur les rails que j'ai lus, mais jusqu'à présent je n'en ai pas trouvé un qui fasse ce genre de distinctions et explique lequel est lequel. Merci encore
banditKing
2
Je ne pourrais pas recommander cette réponse moins à quiconque dans le besoin. Merci pour les détails!
Ikon
3
C'est en effet l'une des réponses les plus complètes et les plus faciles à comprendre sur le stackoverflow (avec un excellent exemple!)
Sheharyar