RSpec metodi di accesso application_controller come 'current_user'
-
03-10-2019 - |
Domanda
Sto cercando di spegnere un metodo sul mio current_user (utilizzando una soluzione di autenticazione restful_authentication modificato) con RSpec. Io sono completamente sicuro di come posso accedere a questo metodo in mie specifiche del controller. current_user di per sé non funziona. Ho bisogno di ottenere il controller stesso prima? Come posso fare questo?
Utilizzando rails 2.3.5
, rspec 1.3.0
e 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
Produce
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>
Soluzione
RSpec-rails ti dà un metodo controller
per l'utilizzo negli esempi di controller. Quindi:
controller.stub!(:current_user).with(:foos).and_return(foos)
dovrebbe funzionare.
Altri suggerimenti
come può sapere dove trovare current_user
? questo dovrebbe risolverlo:
subject.current_user.should_receive(:foos).and_return(foos)
Non sono del tutto familiarità con restful_authentication, solo Authlogic e mettere a punto, ma probabilmente è simile a quella current_user
è un metodo di controllo e non un oggetto, che è il motivo per chiamare should_receive
su di esso non funziona come previsto (sei impostazione un'aspettativa sull'oggetto che current_user
ritorna , ma il metodo non è accessibile all'interno del campo di applicazione della vostra aspettativa).
Prova questo:
stub!(:current_user).and_return(foos)
Ho letto questo e la mia ottimizzato un po '. Se si vuole semplicemente passare un oggetto utente nel tuo test Rspec, è possibile utilizzare questo:
-
In primo luogo, creare un oggetto utente all'interno del test RSpec. Per esempio: (Uso qualunque attributi avete bisogno o è necessario creare l'oggetto utente.)
user = User.create (nome: "ted")
. (Nota: è possibile utilizzare anche una fabbrica da factorygirl)
-
Ora, con quello oggetto utente che viene salvato nella "utente" variabile, fare questo all'interno di quella stessa prova Rspec:
controller.stub! (: Current_user) .and_return (utente)
che dovrebbe funzionare ...