rails mexicali generate español ruby-on-rails ruby rspec devise

ruby on rails - mexicali - ¿Cómo acceder(diseñar) current_user en una prueba de características de rspec?



generate controller devise (3)

En la documentación del dispositivo, brindan consejos sobre cómo puede tener acceso a current_user al probar un controlador:

https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29

Sin embargo, ¿qué pasa cuando se hace una prueba de características? Estoy intentando probar un método de creación de uno de mis controladores, y en ese controlador se usa la variable current_user.

El problema es que la macro sugerida en el dispositivo utiliza la variable @request y es nula para una especificación de característica. ¿Qué es una solución?

EDITAR:

Esto es lo que tengo hasta ahora para mi especificación actual:

feature ''As a user I manage the orders of the system'' do scenario ''User is logged in ad an admin'' do user = create(:user) order = create(:order, user: user) visit orders_path #Expectations end end

El problema es que en mi OrdersController tengo una llamada current_user.orders , y dado que current_user no está definido, me redireccionará a /users/sign_in .

He definido esto en /spec/features/manage_orders.rb


Esto es lo que creo que estás buscando:

require ''spec_helper'' include Warden::Test::Helpers Warden.test_mode! feature ''As a user I manage the orders of the system'' do scenario ''User is logged in ad an admin'' do user = create(:user) login_as(user, scope: :user) order = create(:order, user: user) visit orders_path #Expectations end end


de https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29

Si te he entendido bien, tal vez necesites usar

subject.current_user.email #or controller.current_user.email

por ejemplo :

describe OrdersController, :type => :controller do login_user describe "POST ''create''" do it "with valid parametres" do post ''create'', title: ''example order'', email: subject.current_user.email end end end

controller_macros.rb:

module ControllerMacros def login_user before(:each) do @request.env["devise.mapping"] = Devise.mappings[:user] user = FactoryGirl.create(:user) #user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the "confirmable" module sign_in user end end end

No olvides incluir esto en tu spec_helper.rb:

config.include Devise::TestHelpers, type: :controller config.extend ControllerMacros, type: :controller


puede definir login_user como un método para que el usuario inicie sesión de la siguiente manera (póngalo en la carpeta de soporte):

def login_user Warden.test_mode! user = create(:user) login_as user, :scope => :user user.confirmed_at = Time.now user.confirm! user.save user end

Luego en el escenario diga:

user = login_user