RSpec accès à des méthodes de application_controller telles que « current_user »
-
03-10-2019 - |
Question
Je suis en train de bouchonner une méthode sur mon current_user (en utilisant une solution auth restful_authentication modifiée) avec rspec. Je suis complètement incertain de la façon dont je peux accéder à cette méthode dans mes spécifications du contrôleur. current_user par lui-même ne fonctionne pas. Ai-je besoin d'obtenir le contrôleur lui-même d'abord? Comment puis-je faire?
Utilisation rails 2.3.5
, rspec 1.3.0
et rspec-rails 1.3.2
# my_controller_spec.rb
require 'spec_helper'
describe MyController do
let(:foos){ # some array of foos }
it "fetches foos of current user" do
current_user.should_receive(:foos).and_return(foos)
get :show
end
end
Produit
NoMethodError in 'ChallengesController fetches foos of current user'
undefined method `current_user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1::Subclass_1::Subclass_2::Subclass_2:0x7194b2f4>
La solution
rspec-rails vous donne une méthode controller
pour une utilisation dans les exemples de contrôleur. Donc:
controller.stub!(:current_user).with(:foos).and_return(foos)
doit travailler.
Autres conseils
comment peut-il savoir où trouver current_user
? cela devrait résoudre:
subject.current_user.should_receive(:foos).and_return(foos)
Je ne suis pas tout à fait familier avec restful_authentication, juste Authlogic et de conception, mais il est probablement similaire dans ce current_user
est une méthode de commande et non un objet, ce qui est pourquoi appeler should_receive
sur elle ne fonctionne pas comme prévu (vous êtes la mise en attente d'une sur l'objet current_user
retourne , mais la méthode n'est pas accessible dans le cadre de vos attentes).
Essayez ceci:
stub!(:current_user).and_return(foos)
Je lis cela et le mien un peu tordu. Si vous voulez simplement passer un objet utilisateur dans votre test Rspec, vous pouvez utiliser ceci:
-
Tout d'abord, créez un objet utilisateur dans le test rspec. Par exemple: (Utiliser tous les attributs que vous avez besoin ou sont nécessaires pour créer l'objet utilisateur.)
user = User.create (nom: "ted")
(. Remarque: vous pouvez également utiliser une usine de factorygirl)
-
Maintenant, avec cet objet utilisateur qui est enregistré dans la variable « utilisateur », faire dans ce même test Rspec:
controller.stub! (: Current_user) .and_return (utilisateur)
qui devrait fonctionner ...