Rails 3.1 plugin gem, App Test factice, rspec

Donc Rails 3.1 est livré avec un générateur pratique peu connu "rails g plugin new", 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 fait, est de configurer les choses commodément pour les tests avec Test::Unit. Il vous donne une mannequin application Rails que vos tests peuvent s'exécuter dans le contexte de, à tester "moteur" comportement qui ne fonctionne que dans la copie d'une application Rails. (elle le met 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 de telle sorte que les tests seront exécutés dans le contexte de l'application factice, démarré sur at ../ dummy / config / environnement.

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

, Mais ma question est, quelqu'un a trouvé comment faire cela avec rspec à la place? J'ai essayé de suivre le mêmes principes DIY pour mettre en place des choses comme ça pour rspec dans une gemme de plugin rails, mais je rencontre divers barrages routiers confus, et j'espère que quelqu'un d'autre l'a déjà compris (ou serait intéressé à le comprendre pour le reste d'entre nous, heh).

40
demandé sur jrochkind 2011-12-14 20:16:41

2 réponses

Créez le plugin sans Unité de test et spécifiez le chemin de l'application factice:

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

Ajoute RSpec-rails en tant que dépendance de développement au fichier gemspec (foobar.gemspec):

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

Exécuter bundle install

Créez un lien symbolique depuis l'application factice vers le répertoire des spécifications du plugin et exécutez le générateur d'installation Rspec:

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

Modifiez maintenant spec/spec_helper.rb (ou spec/rails_helper.rb dans rails 4+, Pas sûr des anciennes versions) en changeant cette ligne (Ligne 3):

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

À ce:

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

Maintenant, vous pouvez exécuter Rspec à partir de la racine de votre plugin et il va ramasser des spécifications de l'application factice ainsi.

bundle exec rspec spec

J'ai écrit à ce sujet plus en détail, montrant comment configurer également 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

93
répondu nathan amick 2016-09-15 04:21:04

Exécutez simplement rails plugin new <gemname>, puis ajoutez rspec en tant que development_dependency au fichier gemspec, et installez-le rspec --init.

Déplacez maintenant le sous-dossier factice de test à spec et ajoutez-les à 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 sont dans test_helper!

21
répondu Hassan 2012-01-31 13:39:46