web-dev-qa-db-fra.com

Quelle est la différence entre RSpec et Concombre?

J'ai 6 mois d'expérience en développement Rails. J'ai construit une application Web qui est en cours d'utilisation avec l'authentification et l'autorisation et la base de données postgresql.

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

J'ai entendu parler de Rspec et du concombre, mais je suis profondément 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.

112
banditKing

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 (qui sont appelés ATDD, BDD, spécification par exemple, etc., selon la personne à qui vous demandez). Il s'agit de 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 Rails) afin que les problèmes de fonctionnement des différentes parties de votre application puissent être résolus. trouvé d'une manière que les tests unitaires ne trouveront pas.

La principale différence entre RSpec et Cucumber est le facteur de lisibilité de l'entreprise. Le principal avantage 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 les spécifications 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 Describe, Context ou It qui contient la spécification métier, puis 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 personnes non techniques.

Lequel utiliser? Si vous êtes le seul développeur et propriétaire du produit, je resterais avec RSpec, je pense que c'est plus facile à comprendre pour un technicien, offre quelques avantages pour garder les choses à portée et sous contrôle, et vous éviter de jouer avec les RegEx pour le test pas. Si vous construisez cela pour un client et qu'ils sont pratiques en ce qui concerne la spécification, allez avec 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 blog est excellente pour démarrer avec RSpec.

317
DVG