Débuter avec le concombre

Une fonctionnalité Concombre

Cucumber utilise la [syntaxe Gherkin][1] pour décrire les comportements de votre logiciel dans un langage naturel structuré.

En tant que tel, Cucumber n’est ** pas ** un framework de test (un malentendu courant), mais un framework de documentation système, pas très différent des autres comme Use Case Scenario. Le malentendu courant est dû au fait que la documentation de Cucumber peut être automatisée afin de s’assurer qu’elle reflète le comportement réel du système.

Une suite de documentation Cucumber est composée de Features, chacune décrivant une fonctionnalité de votre logiciel, écrite en Gherkin et hébergée dans son propre fichier. En organisant ces fichiers dans une structure de répertoires, vous pouvez grouper et organiser les fonctionnalités :

  • banque/
  • fonctionnalité de retrait
  • atm.fonctionnalité
  • prêt-personnel.fonctionnalité
  • commerce/
  • portfolio.fonctionnalité
  • fonctionnalité intrajournalière
  • hypothèque/
  • évaluation.fonctionnalité
  • comptabilité.fonctionnalité

Chaque Feature est un fichier texte composé d’une section d’introduction facultative, non structurée et purement informative et d’un ou plusieurs Scenarios, chacun représentant une condition d’utilisation ou un cas d’utilisation.

Exemple:

Feature: Documentation
As a StackOverflow user or visitor
I want to access the documentation section
    
    Scenario: search documentation on Stack Overflow
        Given I am on StackOverflow
        And I go to the Documentation section
        When I search for "cucumber"
        And I follow the link to "cucumber"
        Then I should see documentation for "cucumber"

Chaque ligne commençant par Given, When, And, But ou Then est appelée une Step. N’importe quelle étape peut commencer par n’importe lequel de ces mots, quel que soit l’ordre, mais il est conventionnel de les utiliser de la manière la plus naturelle possible.

Les fonctionnalités peuvent également être organisées via des Tags, des annotations que l’éditeur peut mettre sur une Feature ou un Scenario pour la catégoriser davantage.

L’exécutabilité d’une fonctionnalité est obtenue via le code glue qui peut être écrit dans de nombreux langages différents (Java, Ruby, Scala, C/C++) : chaque “étape” est comparée au code de colle afin d’identifier les “définitions d’étape” (généralement abrégées à StepDef) via des expressions régulières.

Chaque Étape ne peut avoir qu’une seule Définition d'étape associée.

Lorsqu’une Feature est exécutée, chaque Scenario composant est exécuté, ce qui signifie que chaque StepDef correspondant aux Steps dans chaque Scenario est exécuté.

[1] : https://cucumber.io/docs/reference#gherkin

Une définition d’étape de concombre dans Ruby

Dans features/step_definitions/documentation.rb :

When /^I go to the "([^"]+)" documentation$/ do |section|
  path_part =
    case section
      when "Documentation"
        "documentation"
      else
        raise "Unknown documentation section: #{section}"
    end
  visit "/documentation/#{path_part}/topics"
end

Then /^I should see the "([^"]+) documentation"$/ do |section|
  expect(page).to have_css('h2.doctag_title a', text: section)
end

Ces étapes exercent une application Web. Ils sont à peu près aussi simples que possible tout en étant pratiques.

Chaque étape commence par un mot-clé Gherkin, qui dans un fichier de définition d’étape est une méthode qui enregistre une étape avec Cucumber. La méthode de définition d’étape prend une expression régulière, qui correspond à une ligne dans un scénario, et un bloc, qui est exécuté lorsque le scénario atteint une ligne correspondante. Les groupes de capture dans l’expression régulière sont transmis au bloc en tant que paramètres de bloc.

L’étape Quand a un exemple simple en ligne de passage d’une référence lisible par l’homme à une page (“Documentation”) à une URL. Les suites Real Cucumber placent généralement cette logique dans une méthode distincte. La méthode “visite” est fournie par Capybara. Capybara n’est pas obligé d’utiliser le concombre, bien qu’il soit très couramment utilisé avec lui. visit indique au navigateur contrôlé par Capybara de visiter l’URL donnée.

L’étape “Ensuite” montre comment le contenu d’une page peut être testé. expect/to est fourni par RSpec (encore une fois, non requis par Cucumber mais très couramment utilisé avec lui). have_css est fourni par Capybara. L’attente est que le sélecteur CSS donné corresponde à un élément de la page qui contient le texte donné. Notez que cette attente échouerait si la requête du navigateur avait échoué.

Pour plus d’exemples, voir [la rubrique “Définition de l’étape”][1].

[1] : https://www.wikiod.com/fr/cucumber/definitions-des-etapes

Installation de Ruby pur

Pour installer Cucumber pour une utilisation avec Ruby, utilisez simplement la commande

gem install cucumber

Alternativement, si vous utilisez bundler, vous pouvez ajouter la ligne suivante à votre Gemfile

gem 'cucumber'

Et puis lancez bundler

bundle install

[Je pense que cela appartient à son propre sujet, Installation. J’ai créé ce sujet et copié cet exemple là-bas. Lorsque ce sujet sera approuvé, je le déplacerai ici et supprimerai la copie.]