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>
Était-ce utile?

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:

  1. 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)

  2. 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 ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top