Stubber / mocker request.remote_ip

Pour faker une adresse IP d’appel, j’utilisais ça :
Seulement, Rubocop n’était pas content. Avec ça,
Rubocop est content, et c’est la manière la plus simple de le faire 😉

Remplacer Test::Unit par RSpec ?

Test::Unit étant le framework de test pour Ruby on Rails installé par défaut sur un projet Ruby on Rails, c’est celui que nous utilisons au sein de l’équipe pour faire du TDD. Beaucoup de développeurs lui préfèrent cependant RSpec. Je me suis donc penché dessus lors d’une session de veille afin de le comparer à Test::Unit.

L’installation de RSpec se fait via une gem, de façon classique. Il faut ensuite générer les fichiers de test qui seront stockés dans un répertoire spec, à la racine du projet (comparable au répertoire test utilisé par Test::Unit). Chaque fichier de test sera ensuite généré automatiquement lorsqu’on générera un scaffold, un modèle ou un contrôleur.

Après avoir lu les tests générés par RSpec et en avoir écrit quelques-uns, il me semble que RSpec propose sensiblement les mêmes fonctionnalités que Test::Unit, les différences étant principalement sémantiques.

Test écrit avec Test::Unit :

Le même test écrit avec RSpec :

À noter que par défaut, RSpec n’utilise pas de système de fixtures. Il est cependant conseiller de le coupler à Factory_Girl.

On remarque que la syntaxe de RSpec est sans doute plus verbeuse que celle de Test::Unit. En lisant le test, on comprend tout de suite ce que fait (ou doit faire) le code de la méthode testée. Les mots-clés de RSpec (« describe », « context », « it », …) permettent de faire des phrases qui rendent le code lisible même pour un public non développeur. On dit souvent que les tests d’une application remplacent la documentation. C’est encore plus le cas si on utilise RSpec.

N’ayant pas vu de différence fondamentale entre RSpec et Test::Unit, nous continuons à utiliser Test::Unit que nous maitrisons bien. Cependant, il serait intéressant de prendre le temps de développer un projet en utilisant les deux frameworks de test en parallèle, pour pousser plus loin la comparaison.

Lectures complémentaires :