2013-02-15 4 views
3

В моем people_controller_spec.rb менясессия хэш не сохраняется на RSpec тестов

before(:each) do 
    @office = FactoryGirl.create(:office) 
    @organization = FactoryGirl.create(:organization) 
    @user = FactoryGirl.create(:user, organization: @organization) 

    @request.session['user_id'] = @user.id 
    @request.session['current_organization_id'] = @user.organization.id 
    end 

и у меня есть этот application_controller.rb

class ApplicationController < ActionController::Base 

    protect_from_forgery 

    private 

    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def current_organization 
    if session[:current_organization_id] 
     Organization.find(session[:current_organization_id]) 
    else 
     @current_organization ||= Organization.find(current_user.organization_id) 
    end 
    end 

    helper_method :current_user 
    helper_method :current_organization 
end 

Сеанс хэш-видимому, не сохраняется внутри application_controller .rb, поэтому я получаю такие ошибки при тестировании, когда @current_user в приложении_controller.rb равен нулю

6) PeopleController index sorts all people alphabetically by first_name 
    Failure/Error: get :index, {search: {meta_sort: "first_name.asc"}}, valid_session 
    NoMethodError: 
     undefined method `organization_id' for nil:NilClass 
    # ./app/controllers/application_controller.rb:15:in `current_organization' 
    # ./app/controllers/people_controller.rb:107:in `get_orgs' 
    # ./spec/controllers/people_controller_spec.rb:71:in `block (3 levels) in <top (required)>' 

Я уже сделал все, но не смог.

Я использую рельсы (3.2.9) и Rspec-рельсы 2.12.2

Я решил проблему после просмотра этого Devise Test Helper - sign_in does not work

Я просто удалить все "valid_session" вызов метода.

ответ

5

В вашем before :each блоке установлен сеанс с:

session[:user_id] = @user.id 
session[:current_organization_id] = @user.organization.id 

Это использует вспомогательный сеанс, предоставленную Rspec макросов контроллера. Также я не уверен, является ли сеанс HashWithIndifferentAccess, например params, но в любом случае полезно использовать один и тот же тип ключа.

+0

Я уже пробовал этот, но все еще не работал. – neilmarion

+0

Решил проблему. Проверьте мои изменения. :) – neilmarion

+0

А - Я должен был попросить сам проверить тест. Что-то иметь в виду и для разработки тоже :) – roo

Смежные вопросы