Sto provando a eseguire lo stub di un metodo su un helper definito nel mio controller. Per esempio:Impossibile eseguire il metodo di supporto stub 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
Nel mio 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
In 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
ho fatto una domanda simile here, ma optato per un lavoro in giro. Questo strano comportamento è di nuovo insinuato e mi piacerebbe capire perché non funziona.
UPDATE: ho trovato che chiamare controller.stub!(:current_user).and_return(@user)
prima helper.stub!(...)
è ciò che sta causando questo comportamento. Questo è abbastanza facile da risolvere in spec/support/authentication.rb
, ma si tratta di un bug in Rspec? Non vedo perché ci si aspetterebbe che non sia in grado di stubare un metodo su un helper se fosse già stato stubato su un controller.
Prova spegnendo il metodo attraverso l'ApplicationController, dal momento che è in cui è definito. 'ApplicationController.stub (: current_user => @user) EDIT: Ora sto pensando che potrebbe non funzionare. – dwhalen
No, non ha funzionato. Ho provato anche "any_instance" senza fortuna. In realtà ho funzionato, ma sono un po 'confuso (potrebbe aver trovato un bug con rspec). Aggiornerò la domanda a breve – Brad
Sembra un bug. Vale sicuramente la pena presentare un problema su https://github.com/rspec/rspec-mocks/issues (e provare con l'ultima versione). –