Pourquoi ne pas RSpec de méthodes “get”, “post”, “mettre”, “supprimer” travailler dans un contrôleur de spec dans un bijou (ou à l'extérieur des Rails)?
Je ne suis pas nouvelle Rails ou Rspec, mais je suis de nouveau à faire de gemmes. Quand je test mon contrôleurs, le RESTE méthodes "get", "post", "mettre", "supprimer" donnez-moi une méthode non définie erreur.
Vous trouverez ci-dessous le code, mais si vous préférez le voir dans une pastie, cliquez ici.
Merci!
Voici mon spec_helper.rb:
$LOAD_PATH.unshift(File.dirname(__FILE__))
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
require 'rubygems'
require 'active_support' unless defined? ActiveSupport # Need this so that mattr_accessor will work in Subscriber module
require 'active_record/acts/subscribable'
require 'active_record/acts/subscriber'
require 'action_view'
require 'action_controller' # Since we'll be testing subscriptions controller
#require 'action_controller/test_process'
require 'spec'
require 'spec/autorun'
# Need active_support to user mattr_accessor in Subscriber module, and to set the following inflection
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'dorkus', 'dorkuses'
end
require 'active_record' # Since we'll be testing a User model which will be available in the app
# Tell active record to load the subscribable files
ActiveRecord::Base.send(:include, ActiveRecord::Acts::Subscribable)
ActiveRecord::Base.send(:include, ActiveRecord::Acts::Subscriber)
require 'app/models/user' # The user model we expect in the application
require 'app/models/person'
require 'app/models/subscription'
require 'app/models/dorkus'
require 'app/controllers/subscriptions_controller' # The controller we're testing
#... more but I think irrelevant
Mon subscriptions_spec:
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe SubscriptionsController, "on GET index" do
load_schema
describe ", when only subscribable params are passed" do
it "should list all the subscriptions of the subscribable object"
end
describe ", when only subscriber params are passed" do
it "should list all the subscriptions of the subscriber" do
u = User.create
d1 = Dorkus.create
d2 = Dorkus.create
d1.subscribe! u
d2.subscribe! u
get :index, {:subscriber_type => "User", :subscriber_id => u.id}
assigns[:subscriptions].should == u.subscriptions
end
end
end
Mes abonnements contrôleur:
class SubscriptionsController < ActionController::Base
def index
end
end
L'erreur:
NoMethodError in 'SubscriptionsController on GET index , when only subscriber params are passed should list all the subscriptions of the subscriber'
undefined method `get' for #
/home/ramon/rails/acts_as_subscribable/spec/controllers/subscriptions_controller_spec.rb:21:
Vous devez vous connecter pour publier un commentaire.
Car ces méthodes ne font pas partie de Rspec, mais à des Rails.
Lorsque vous décrivez un contrôleur, il hérite de Spec::Rails::Exemple::ControllerExampleGroup, qui hérite FunctionalExampleGroup, qui hérite de la de rails ActionController::TestCase.
Si vous regardez ActionController::TestCase de la documentation vous trouverez c'est là que le get/post/put/delete méthodes sont définies.
Donc, si vous voulez avoir accès à ces méthodes à l'extérieur des Rails, vous avez besoin de les redéfinir.
Ajoutant :type => contrôleur de décrire comme suit travaillé pour moi
Le lien de la accepté la réponse ci-dessus est aujourd'hui brisé. Voici le lien mis à jour (pour 2.3.8)
http://api.rubyonrails.org/v2.3.8/classes/ActionController/TestCase.html
J'ai eu ce problème avec un bijou, je suis en train de faire un système de Rails 2.3.8. J'ai alors réalisé que j'étais en utilisant l'un Rspec Rails en version 2.0, quand je devrais être à l'aide de la dernière version de Rspec-Rails-1.3 (version 1.3.4).
J'ai désinstallé tous les RSpec-Rails v2 liées gemmes (rspec-core, rspec-attentes, rspec-se moque, etc), de la configuration de mon Gemfile avec v1.3.4, et a couru la liasse "installer".
Je suis à l'aide d'un mannequin de Rails 2.3.8 application dans spec/dummy configuré pour utiliser le système de regroupement, et avec un Gemfile configurés avec le même bijou dépendances mes gemmes Gemfile (qui attrape les joyaux de fichier gemspec).
J'ai couru 'script/generate rspec' pour générer la RSpec fichiers/dossiers pour les Rails, j'ai référencé pour faire les configurations appropriées dans mes gemmes Rakefile et spec_helper.rb fichier.