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>
¿Fue útil?

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:

  1. 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)

  2. 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 ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top