Rails 4 et MongoDB part 2 : Cucumber
Dans l’article précédent, nous nous étions arrêté après l’utilisation du scaffolding pour créer un document dans MongoDB et le CRUD qui va avec.
Parmi les fichiers générés nous avons :
- notre document post.rb un contrôleur
- le fichier posts_controller.rb qui contient les fonctions de base pour le CRUD
- un dossier posts contenant les différentes vues
Afin de commencer par de bonnes pratiques, nous allons créer nos premiers tests BDD avec Cucumber.
Le BDD, Behavior Driven Developmen, est une méthode agile qui consiste à écrire des tests de scénarios décrivant le comportement de l’application dans un langage le plus proche possible de celui de l’humain. Un exemple valant mieux qu’un long discoure, voilà le scénario décrivant la page de listing des posts :
Scenario: Posts List Given I have posts titled Paris, Marseille When I go to the list of posts Then I should see "Paris" And I should see "Marseille"
En lisant ce texte, il est facile de savoir ce qu’il se passe et ce qui va être testé.
Afin de commencer, copiez le code suivant dans le fichier features/posts.feature :
Feature: Manage posts In order to make a blog As an author I want to create and manage posts Scenario: Posts List Given I have posts titled Paris, Marseille When I go to the list of posts Then I should see "Paris" And I should see "Marseille"
Ici nous avons juste rajouté le bloc Feature afin de décrire la fonctionnalité qui sera testée.
Une fois fait, en ligne de commande lancez : rake cucumber
Vous devriez alors avoir la sortie suivante :
Cucumber nous indique ici qu’il ne comprend pas les différentes étapes de notre test. En effet il ne peut pas comprend sans qu’on lui explique ce qu’il faire pour la ligne Given I have posts titled Paris, Marseille. Il nous faut écrire le code correspondant a cette étape. Créez alors un fichier step_definitions/posts_steps.rb puis ajoutez-y :
Given /^I have posts titled (.+)$/ do |names| names.split(', ').each do |name| Post.create!(:name => name) end end
Que faisons-nous ici ? La 1re ligne est une expression régulière afin de définir quelle étape nous définissons, elle capture tout ce qui suit et le fournit dans la variable names .
À la ligne 2, nous divisons la variable sur , et itérons sur les valeurs retournées afin de les ajouter dans MongoDB grâce à la ligne 3.
Si nous relançons les tests nous pouvons voir que nous somme allez plus loin cette fois.
Il ne nous reste plus qu’à définir les autres étapes de notre test afin d’avoir 100% dans nos scénarios :
Pour voir le code, j’ai créé un dépôt GitHub : https://github.com/dayofr/rails_tuto .
Dans le prochain article je parlerais d’intégration continue avec Travis-ci.