RSpec métodos acceder application_controller tales como 'current_user'
-
03-10-2019 - |
Pregunta
Estoy intentando apagar un método en mi current_user (usando una solución de autenticación restful_authentication modificado) con rspec. Estoy completamente seguro de cómo puedo acceder a este método en mi especificaciones del controlador. current_user por sí sola no funciona. Qué necesito para obtener el controlador mismo en primer lugar? ¿Cómo puedo hacer esto?
Uso rails 2.3.5
, rspec 1.3.0
y 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>
Solución
rspec-carriles le da un método controller
para su uso en los ejemplos de controlador. Por lo tanto:
controller.stub!(:current_user).with(:foos).and_return(foos)
debe al trabajo.
Otros consejos
¿cómo puede saber dónde encontrar current_user
? esto debe resolverlo:
subject.current_user.should_receive(:foos).and_return(foos)
No estoy totalmente familiarizado con restful_authentication, simplemente Authlogic y trazo, pero es probable que sea similar en que current_user
es un método de controlador y no un objeto, por lo que llamar should_receive
en él no está funcionando como se esperaba (eres el establecimiento de una expectativa en el objeto que current_user
retornos , pero el método no es accesible dentro del alcance de sus expectativas).
Prueba esto:
stub!(:current_user).and_return(foos)
leo esto y la mía retocado un poco. Si simplemente desea pasar de un objeto de usuario en su prueba Rspec, puede utilizar lo siguiente:
-
En primer lugar, crear un objeto de usuario dentro de la prueba rspec. Por ejemplo: (Cualquiera que sea su uso atributos que necesita o está obligado a crear el objeto de usuario.)
user = User.create (nombre: "Ted")
(Nota:. También puede utilizar una fábrica de factorygirl)
-
Ahora, con ese objeto de usuario que se guarda en el "usuario" variables, hacer esto dentro de esa misma prueba Rspec:
controller.stub! (: Current_user) .and_return (usuario)
que debería funcionar ...