Il est assez facile avec le générateur ajouté de rspec-rails de configurer RSpec pour tester une application Rails. Mais que diriez-vous d'ajouter RSpec pour tester un bijou en développement? Je n'utilise pas de bijoutier ou de tels outils. Je viens d'utiliser Bundler ( bundle gem my_gem
) pour configurer la structure du nouveau gem et éditer le * .gemspec manuellement. J'ai également ajouté s.add_development_dependency "rspec", ">= 2.0.0"
à gemspec et fait un bundle install
.
Existe-t-il un tutoriel intéressant, que faire ensuite pour que RSpec fonctionne?
Réponses:
J'ai mis à jour cette réponse pour correspondre aux meilleures pratiques actuelles:
Bundler prend parfaitement en charge le développement de gemmes. Si vous créez une gemme, la seule chose que vous devez avoir dans votre Gemfile est la suivante:
Cela indique à Bundler de rechercher dans votre fichier gemspec les dépendances lorsque vous exécutez
bundle install
.Ensuite, assurez-vous que RSpec est une dépendance de développement de votre gemme. Modifiez le gemspec pour qu'il se lit comme suit:
Ensuite, créez
spec/spec_helper.rb
et ajoutez quelque chose comme:Les deux premières lignes indiquent à Bundler de ne charger que les gemmes dans votre gemspec. Lorsque vous installez votre propre gemme sur votre propre machine, cela forcera vos spécifications à utiliser votre code actuel, pas la version que vous avez installée séparément.
Créez une spécification, par exemple
spec/foobar_spec.rb
:Facultatif: ajoutez un
.rspec
fichier pour les options par défaut et placez-le dans le chemin racine de votre gem:Enfin: exécutez les spécifications:
la source
rspec --init
rspec --init
n'était pas disponible quand j'ai écrit ceci, mais bon point!La solution d'Iain ci-dessus fonctionne très bien!
Si vous voulez également un Rakefile, c'est tout ce dont vous avez besoin:
Vérifiez le RDoc pour RakeTask pour diverses options que vous pouvez éventuellement passer dans la définition de tâche.
la source
Vous pouvez générer votre nouvelle gemme avec rspec en exécutant
bundler gem --test=rspec my_gem
. Aucune configuration supplémentaire!J'oublie toujours ça. Il est mis en œuvre ici: https://github.com/bundler/bundler/blob/33d2f67d56fe8bf00b0189c26125d27527ef1516/lib/bundler/cli/gem.rb#L36
la source
--test=rspec
, mais il m'a quand même demandé si je voulais utiliser Rspec lorsque je couraisbundler gem my_gem
.Voici un moyen bon marché et facile (mais pas officiellement recommandé):
Faites un répertoire dans la racine de votre gemme appelé
spec
, mettez vos spécifications là-dedans. Vous avez probablement déjà installé rspec, mais si vous ne le faites pas, faites simplement ungem install rspec
et oubliez Gemfiles et bundler.Ensuite, vous allez créer une spécification, et vous devez lui indiquer où se trouve votre application, où se trouvent vos fichiers et inclure le fichier que vous souhaitez tester (ainsi que toutes les dépendances dont il dispose):
Ouvrez le Terminal et exécutez rspec:
Si vous voulez
.rspec
aimer certaines options, allez créer un.rspec
fichier et placez-le dans le chemin racine de votre gemme. Le mien ressemble à ceci:Facile, rapide, soigné!
J'aime cela parce que vous n'avez pas du tout à ajouter de dépendances à votre projet, et le tout reste très rapide.
bundle exec
ralentit un peu les choses, ce que vous devez faire pour vous assurer que vous utilisez la même version de rspec tout le temps. Ces 0,56 secondes qu'il a fallu pour exécuter deux tests ont été prises à 99% au moment où il a fallu à mon ordinateur pour charger rspec. L'exécution de centaines de spécifications devrait être extrêmement rapide. Le seul problème que vous pourriez rencontrer et dont je suis conscient est que si vous changez de version de rspec et que la nouvelle version n'est pas rétrocompatible avec une fonction que vous avez utilisée dans votre test, vous devrez peut-être réécrire certains tests.C'est bien si vous faites des spécifications ponctuelles ou si vous avez une bonne raison de NE PAS inclure rspec dans votre gemspec, mais ce n'est pas très bon pour activer le partage ou appliquer la compatibilité.
la source
Thing = AwesomeGem::Awesome
ou vous pouvez faire le test à l'intérieur d'un module, commemodule AwesomeGem; it 'stuff' do; Awesome.new ... end; end