37 votes

Test du moteur montable Rails 3.1 avec Rspec

J'ai commencé à faire un Rails 3.1 moteur, et je vais avoir un moment difficile de le tester à l'aide de rspec.

Tout d'abord, si j'exécute rails g integration_test whatever il crée régulièrement un test d'intégration dans les tests/intégration au lieu de spec/demandes (rspec-gem rails est installé et tenu comme un développement de la dépendance dans le fichier gemspec)

Aussi, lorsque je lance une spécification de test, je reçois un message d'erreur indiquant que le tableau correspondant au modèle que je suis en essais n'a pas été créé. J'ai essayé d' rake engine_name:install:migrations et en cours d'exécution rake db:migrate de l'intérieur de l'application d'exemple, et je reçois une "table existe déjà erreur".

Tout semble déconnecté, je sens que je suis absent quelque chose ici pour faire de la rspec gem travailler de façon transparente comme il le fait habituellement avec plein applications rails.

J'ai suivi toutes les modifications à partir d'ici http://rubyx.com/2011/03/01/start-your-engines et je peux tester le moteur manuellement par le lancement de l'application d'exemple via la console comme illustré ici http://railscasts.com/episodes/277-mountable-engines.

Est-il un moyen de faire rspec la valeur par défaut pour le test d'un des rails 3.1 moteur?

62voto

dwhite Points 1246

Je suis à l'aide de RSpec avec un moteur Rails sans problèmes.

J'ai créé mon plugin en utilisant les commutateurs suivants: -T --complet --mannequin-path=spec/dummy.

  • -T exclut test/unité
  • --full indique que le plugin est un moteur
  • --dummy-path est tout simplement de sorte que nous n'obtenons pas un répertoire de test (le par défaut, c'est de tester/dummy).

À partir de là, j'ai utilisé le spec_helper.rb de la "démarrez vos moteurs" de l'article:

# Configure Rails Envinronment
ENV["RAILS_ENV"] = "test"
require File.expand_path("../dummy/config/environment.rb",  __FILE__)

require 'rspec/rails'

ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }

RSpec.configure do |config|
  config.use_transactional_fixtures = true
end

Pour les générateurs. - Je ajouter une config.les générateurs de bloc pour mon moteur.rb fichier comme suit:

module MyEngine
  class Engine < Rails::Engine
    config.generators do |g|
      g.test_framework :rspec, :view_specs => false
    end
  end
end

Avec ça, je suis en mesure d'obtenir des tests rspec lors de l'exécution d'un générateur comme le générateur de modèle.

Comme pour la bd, c'est votre base de données.fichier yml mettre en place correctement? Avez-vous chargé de l'environnement de test, par exemple, rake db:test:clone ou rake db:migrate RAILS_ENV=test? Ma conjecture est que RSpec ne pouvez pas voir vos tables, car il n'y a pas un test de base de données.

9voto

Fabio Points 8145

Je cherchais la même réponse et j'ai trouvé la gemme de combustion * qui promet de créer un environnement complet pour spécifier votre moteur de manière plus simple. Il suffit d'ajouter

 gem.add_development_dependency 'combustion', '~> 0.3.1'
 

à votre gemspec et courir

 bundle exec combust
 

reproduire une application rails complète dans votre répertoire de spécifications.

* Je n'ai pas encore essayé ...

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