Photo de Karen Lau sur Unsplash

Écrire des tests pour le code d’une application est quelque chose que tous les programmeurs devraient être familiarisés à faire, quel que soit le langage ou le framework de leur choix. RSpec est une incroyable suite de tests et un DSL (Domain-Specific Language) construit en Ruby, qui vous permet d’écrire des tests unitaires avec facilité en utilisant un ensemble de méthodes prédéfinies. Mon initiation à l’écriture de code en Ruby a été étroitement liée à l’expérience de l’exécution religieuse de RSpec pour tester ce que j’avais écrit ; aussi, lorsque j’ai commencé à apprendre Rails, continuer à utiliser RSpec a constitué une transition plus naturelle et sans heurts. Par défaut, Rails utilise le cadre de test MiniTest. Nous allons voir comment configurer un nouveau projet Rails pour utiliser RSpec, puis explorer l’utilisation de Capybara pour tester nos vues.

D’abord, nous allons créer un nouveau projet Rails en exécutant rails new NAME -T -B, où NOM est le chemin d’accès au répertoire du projet qui doit être créé. Le drapeau -T spécifie que Rails ne doit pas mettre en place de cadre de test pour notre nouveau projet, ce qui est exactement ce que nous voulons. Le drapeau -B indique à Rails de ne pas exécuter bundle install à ce stade. Ensuite, nous devons modifier notre Gemfile pour inclure ce qui suit :

group :development, :test do
gem 'rspec-rails'
gem 'capybara'
end

Cela ajoute à la fois RSpec et Capybara à nos environnements de développement et de test. À ce stade, exécutez bundle pour installer les gems et toutes les dépendances dont le projet a besoin. J’aime passer dans rails console à ce stade juste pour vérifier que tout fonctionne, et si ce n’est pas le cas – je retourne à mon Gemfile et corrige les problèmes.

Maintenant que nous avons notre squelette de projet en place, la prochaine étape est de rig up notre suite de tests. Il suffit d’exécuter rails generate rspec:install à ce stade pour créer le répertoire spec et la structure de fichiers nécessaire. La dernière étape consiste à dire à nos tests d’utiliser Capybara. Dans spec/rails_helper.rb, ajoutez ce qui suit:

require 'capybara/rspec'

C’est tout pour la configuration ! Avant d’aller plus loin, commettons les modifications que nous avons apportées à notre projet : git add . && git commit -m "initial commit". Plongeons dans la création d’un contrôleur et faisons quelques tests !

Photo de Max Nelson sur Unsplash

Pour nos tests, nous allons créer un formulaire simple avec quelques entrées, puis demander à Capybara de remplir quelques données échantillons et de soumettre le formulaire. Nous ne nous soucierons pas de créer des modèles complexes ou de persister les informations dans une base de données. Demandons à Rails de créer un contrôleur users et de configurer un certain routage pour nous :

rails generate controller Users new --no-helper --no-assets --no-view-specs

En spécifiant --no-helper --no-assets, nous indiquons à Rails de ne pas créer d’actifs ou d’aide pour notre contrôleur. L’option --no-view-specs indique au générateur de ne pas créer de tests pour les vues – nous verrons plus tard comment créer les tests que nous voulons. Rails a créé une route new pour nous, que nous pouvons voir dans config/routes.rb:

Rails.application.routes.draw do
get 'users/new'
end

Et dans app/controllers/users_controller.rb:

class UsersController < ApplicationController
def new
end
end

Finalement, Rails a créé une vue pour nous dans app/views/users/new.html.erb. Modifions cette vue pour créer un formulaire simple:

<h1>User Login</h1>
<%= form_tag users_path do %>
<%= label_tag :name %>
<%= text_field_tag :name %>
<%= submit_tag "submit" %>
<% end %>

Nous devons faire quelques choses pour finir de câbler tout ça. Dans routes.rb, ajoutez ce qui suit:

post 'users' => 'users#welcome'

Nous devons également ajouter une action welcome à users_controller.rb:

def welcome
@user = params
render :welcome
end

L’étape finale ici est de créer views/users/welcome.html.erb et d’inclure un peu de HTML et d’ERB pour afficher le nom de l’utilisateur:

<h1><%= "Welcome, #{@user}!" %></h1>

Phew ! Si nous exécutons rails server et allons sur localhost:3000/users/new dans notre navigateur, nous devrions être accueillis par un formulaire nous demandant de saisir notre nom. Lorsque nous entrons notre nom et appuyons sur le bouton d’envoi, nous devrions être redirigés vers une page nous souhaitant la bienvenue. Tout cela est bien beau, mais devoir tester notre code de cette manière pour s’assurer qu’il fonctionne à chaque fois que nous ajoutons un nouveau formulaire ou que nous implémentons une nouvelle fonctionnalité deviendra vite fastidieux. Heureusement, un outil a été créé pour tester et automatiser ce processus pour nous!

C’est là que Capybara entre en jeu. Capybara est un framework qui nous permet de tester le code de nos vues en remplissant les données du formulaire, en inspectant le contenu de la page et en envoyant des requêtes HTTP au navigateur. Mettons en place une spécification pour tester notre formulaire nouvellement créé :

rails generate rspec:feature form

Cela va générer le fichier spec/features/form_spec.rb. Par défaut, Capybara s’attend à trouver les specs dans un répertoire appelé features. Modifions ce fichier pour ajouter un nouveau test, qui remplira l’entrée du champ de texte name et appuiera sur submit:

require 'rails_helper'RSpec.feature "Forms", type: :feature do
it 'can enter a name and receive a greeting' do
visit 'users/new'
fill_in :name, with: "Capybara"
click_on 'submit'
expect(page).to have_content "Welcome, Capybara!"
end
end

C’est tout ! Nous avons créé avec succès notre premier test dans Rails en utilisant RSpec et Capybara. Si nous exécutons rspec --format documentation, nous devrions voir que le test passe. N’hésitez pas à expérimenter – quels sont les moyens de faire échouer le test ? Y a-t-il d’autres tests que nous pourrions créer pour cet exemple ? Nous n’avons fait qu’effleurer la surface ici – espérons que cela vous fasse réfléchir sur la façon dont vous pouvez simplifier et automatiser le processus de test de votre code en utilisant ces outils, et prendre l’habitude de tester votre code souvent.

Visitez ici pour le code présenté dans ce post.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.