Incapable de stub méthode d'assistance avec rspec

Je suis en train d'écraser une méthode sur un assistant, qui est définie dans mon contrôleur. Par exemple:

class ApplicationController < ActionController::Base
  def current_user
    @current_user ||= authenticated_user_method
  end
  helper_method :current_user
end

module SomeHelper
  def do_something
    current_user.call_a_method
  end
end

Dans mon Rspec:

describe SomeHelper
  it "why cant i stub a helper method?!" do
    helper.stub!(:current_user).and_return(@user)
    helper.respond_to?(:current_user).should be_true # Fails
    helper.do_something # Fails 'no method current_user'
  end
end

Dans spec/support/authentication.rb

module RspecAuthentication
  def sign_in(user)
    controller.stub!(:current_user).and_return(user)
    controller.stub!(:authenticate!).and_return(true)

    helper.stub(:current_user).and_return(user) if respond_to?(:helper)
  end
end

RSpec.configure do |config|
  config.include RspecAuthentication, :type => :controller
  config.include RspecAuthentication, :type => :view
  config.include RspecAuthentication, :type => :helper
end

J'ai posé une question similaire ici, mais réglé sur un travail autour de. Ce comportement étrange a se dirigea de nouveau et je voudrais comprendre pourquoi cela ne marche pas.

Mise à JOUR: j'ai trouvé que l'appel controller.stub!(:current_user).and_return(@user) avant helper.stub!(...) est ce qui est à l'origine de ce comportement. C'est assez facile à corriger dans spec/support/authentication.rb, mais est-ce un bug Rspec? Je ne vois pas pourquoi il devrait pas être en mesure de stub une méthode sur une assistance si c'était déjà écrasé sur un contrôleur.

  • Essayez de cogner de la méthode à travers ApplicationController, puisque c'est là où il est défini. ApplicationController.stub(:current_user => @user) EDIT: Maintenant, je pense que cela pourrait ne pas fonctionner.
  • Non, ça n'a pas fonctionné. J'ai essayé any_instance trop à pas de chance. En fait, j'ai eu à travailler, mais je suis un peu confus (peut-être trouvé un bug avec rspec). Je mettrai à jour la question de peu de temps.
  • Sonne comme un bug. Il est certainement la peine de dépôt de la question github.com/rspec/rspec-mocks/issues (et d'essayer avec la dernière version).
  • Créé billet: github.com/rspec/rspec-mocks/issues/135
  • j'ai le même problème, n'ont aucune des solutions encore?
InformationsquelleAutor Brad | 2012-05-10