2015-05-26 3 views
4

Мой текущий код выглядит следующим образом:Установка значения сеанса через RSpec

/spec/support/spec_test_helper.rb

module SpecTestHelper 
    def login_admin 
    user = FactoryGirl.create(:user, type: 0) 
    session[:user_id] = user.id 
    end 
end 

/app/controllers/application_controller.rb

def current_user 
    if session[:user_id].nil? 
    render plain: 'Error', status: :unauthorized 
    else 
    @current_user ||= User.find(session[:user_id]) 
    end 
end 

К сожалению, сессия всегда пуста в методе current_user. Есть ли способ контролировать сеанс через RSpec?

+0

для спецификации функции или контроллера? – apneadiving

+0

Контроллер spec – Sebastian

+0

как/где вы называете 'login_admin'? – apneadiving

ответ

4

Это изменится в зависимости от типа спецификации. Например, спецификация feature не позволит вам напрямую изменять сеанс. Однако, спецификация controller будет.

Вам нужно будет включить helper methods module в вашу группу примеров. Скажем, у вас есть WidgetsController:

require 'support/spec_test_helper' 

RSpec.describe WidgetsController, type: :controller do 
    include SpecTestHelper 

    context "when not logged in" do 
    it "the request is unauthorized" do 
     get :index 
     expect(response).to have_http_status(:unauthorized) 
    end 
    end 

    context "when logged in" do 
    before do 
     login_admin 
    end 

    it "lists the user's widgets" do 
     # ... 
    end 
    end 
end 

Вы также можете automatically include the module во все спецификации, или specific specs с помощью metadata.

Я часто делают это путем добавления изменений конфигурации в файл, который определяет вспомогательные методы:

/spec/support/spec_test_helper.rb

module SpecTestHelper 
    def login_admin 
    user = FactoryGirl.create(:user, type: 0) 
    session[:user_id] = user.id 
    end 
end 

RSpec.configure do |config| 
    config.include SpecTestHelper, type: :controller 
end 
+0

У меня была такая же проблема, и мне это не помогло, я получаю ту же ошибку. "неопределенная локальная переменная или метод' session 'для #

+0

Вы должны включить require' rails_helper 'в SpecTestHelper –

0

Вам просто нужно сделать это:

@request.session[:session_id] = "blabla" 
Смежные вопросы