2010-12-09 3 views
3

Как проверить приложение Sinatra, использующее сеанс?Как проверить приложение Sinatra с использованием сеанса

get "/", {}, {'rack.session' => { 'foo' => 'blah' } } 

Этот код не работает для меня, у меня есть «включить: сеансы» в моем приложении.

+1

Почему вы не используете сеанс [: foo] = 'bla'? Ознакомьтесь с документацией Sinatra. – Philip 2010-12-09 21:00:21

+2

Вы когда-нибудь находили решение для этого? Я в том же беспорядке, и я пробовал свой путь, а также предлагаемые решения ниже. Ничего не работает. – Mika 2011-07-13 18:22:48

ответ

-1

Как сказал Филипп, было бы лучше вручную установить переменную сеанса перед запросом get.

session[:foo] = 'blah' 
get "/" 
+5

`NameError: неопределенная локальная переменная или метод 'session`` – fguillen 2011-03-10 18:47:26

4

Похоже, что проблема на самом деле иметь enable :sessions активирован.

Вы должны деактивировать эту настройку, чтобы быть доступной, чтобы перезаписать сеанс .

Решение может быть:

# my_test.rb (first line, or at least before you require your 'my_app.rb') 
ENV['RACK_ENV'] = 'test' 

# my_app.rb (your sinatra application) 
enable :sessions unless test? 

# my_test.rb (in your test block) 
get '/', {}, 'rack.session' => { :key => 'value' } 

В другой стороны, чтобы иметь возможность проверить любой сеанса изменения, что действие, как ожидается, мы можем послать а не хэш к rack.session, но указатель на хэш, поэтому мы можем проверить после действие позвонить, если хэш изменен:

# my_test.rb (in your test block) 
session = {} 
get '/', {}, 'rack.session' => session 
assert_equal 'value', session[:key] 
2

Только что столкнулся с этой проблемой, и решение - это просто запрос на требуемые файлы, поэтому @fguillen был прав. В верхней части вашей спецификации, убедитесь, что вы требуете стойку/тест перед вашим Синатра приложение, так что, как минимум, это поможет вам начать:

# in myapp_spec.rb 
require 'rspec' 
require 'rack/test' 
require 'myapp' 

it "should set the session params" do 
    get 'users/current/projects', {}, 'rack.session' => {:user =>'1234'} 
end 

# in myapp.rb 

enable :sessions 

get 'users/current/projects' do 
    p env['rack.session'] 
end 
Смежные вопросы