40 votes

Rails 3.1 plugin gem, dummy test app, rspec

Rails 3.1 est donc livré avec un générateur "rails g plugin new" peu connu et pratique, qui vous donne un squelette adapté à un plugin rails gem. [http://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin]

L'une des choses utiles que cela permet de faire, c'est de mettre les choses en place de manière pratique pour les tests avec Test::Unit. Il vous donne une application Rails factice de base que vos tests peuvent exécuter dans le contexte, pour tester le comportement du "moteur" qui ne fonctionne que dans la copie d'une application Rails. (il la place dans ./test/dummy). Mais vos tests sont toujours dans my_gem/test, les tests ne vivent pas dans l'application factice. Et my_gem/test/test_helper.rb est là, écrit pour que les tests soient exécutés dans le contexte de l'application factice, démarrée dans ../dummy/config/environment.

Je décris cela parce que je pense que beaucoup de gens ne connaissent pas ce nouveau générateur, qui met si bien les choses en place.

Mais ma question est la suivante : quelqu'un a-t-il trouvé comment faire cela avec rspec à la place ? J'ai essayé de suivre les mêmes principes de bricolage pour mettre en place des choses comme ça pour rspec dans un plugin gem de rails, mais je me heurte à divers obstacles déroutants, et j'espère que quelqu'un d'autre a déjà trouvé la solution (ou serait intéressé à trouver la solution pour le reste d'entre nous, heh).

94voto

nathan amick Points 813

Créez le plugin sans test-unit et indiquez le chemin d'accès à l'application fictive :

rails plugin new foobar --skip-test-unit --dummy-path=spec/dummy

Ajouter rspec-rails comme dépendance de développement au fichier gemspec ( foobar.gemspec ):

Gem::Specification.new do |s|
  .
  .
  .
  s.add_development_dependency "rspec-rails"
end

Ejecutar bundle install

Créez un lien symbolique entre l'application factice et le répertoire du plugin spec et lancez le générateur d'installation Rspec :

cd spec/dummy
ln -s ../../spec
rails generate rspec:install
cd -

Modifier maintenant spec/spec_helper.rb (ou spec/rails_helper.rb dans rails 4+, pas sûr pour les versions plus anciennes) en changeant cette ligne (ligne 3) :

require File.expand_path("../../config/environment", __FILE__)

A cela :

require File.expand_path("../dummy/config/environment", __FILE__)

Vous pouvez maintenant lancer Rspec à partir de la racine de votre plugin et il récupérera également les spécifications de l'application factice.

bundle exec rspec spec

J'ai écrit à ce sujet plus en détail, en montrant comment mettre en place capybara, spork et guard dans un plugin rails avec une application factice :

https://web.archive.org/web/20130125091106/http://namick.tumblr.com/post/17663752365/how-to-create-a-gemified-plugin-with-rails-3-2-rspec

21voto

Hassan Points 611

Il suffit de courir rails plugin new <gemname> puis ajouter rspec en tant que development_dependency dans le fichier gemspec, et l'installer rspec --init .

Déplacez maintenant le sous-dossier fictif de test a spec et les ajouter à spec_helper :

ENV["RAILS_ENV"] = "test"

require File.expand_path("../dummy/config/environment.rb",  __FILE__)
require "rails/test_help"
require '<gemname>'

Rails.backtrace_cleaner.remove_silencers!

comme ils le sont dans test_helper !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X