Estoy tratando de colgar un método en un asistente que está definido en mi controlador. Por ejemplo:No se puede colgar el método auxiliar con rspec
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
En mi 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
En 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
le pregunté a una pregunta similar here, pero se establecieron en un trabajo alrededor. Este extraño comportamiento se ha incrementado nuevamente y me gustaría entender por qué esto no funciona.
ACTUALIZACIÓN: He encontrado que llamar antes controller.stub!(:current_user).and_return(@user)
helper.stub!(...)
es lo que está causando este comportamiento. Esto es bastante fácil de arreglar en spec/support/authentication.rb
, pero ¿esto es un error en Rspec? No veo por qué se espera que no sea capaz de cortar un método en un helper si ya se ha conectado en un controlador.
Trate apagando el método a través ApplicationController, ya que es donde se define. 'ApplicationController.stub (: current_user => @user)' EDITAR: Ahora estoy pensando que podría no funcionar. – dwhalen
No, no funcionó. Intenté 'any_instance' también sin suerte. De hecho lo he hecho funcionar, pero estoy un poco confundido (puede haber encontrado un error con rspec). Actualizaré la pregunta en breve. – Brad
Suena como un error. Definitivamente vale la pena archivar un problema en https://github.com/rspec/rspec-mocks/issues (y probar con la última versión). –