Как протестировать приложение Sinatra с помощью сессии - PullRequest
4 голосов
/ 09 декабря 2010

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

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

Этот код не работает для меня, в моем приложении «enable: session».

Ответы [ 4 ]

4 голосов
/ 10 марта 2011

Похоже, проблема в том, чтобы активировать 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 , но указатель на хеш , поэтому мы можем проверить после вызова action , изменился ли hash :

# my_test.rb (in your test block)
session = {}
get '/', {}, 'rack.session' => session
assert_equal 'value', session[:key]
2 голосов
/ 24 августа 2011

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

# 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
0 голосов
/ 27 февраля 2013

Я наконец-то понял это по патчам обезьян Rack::Test::Session:

https://gist.github.com/troelskn/5047135

0 голосов
/ 22 января 2011

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

session[:foo] = 'blah'
get "/"
...