Testing a Sinatra application that uses session

后端 未结 4 1104
粉色の甜心
粉色の甜心 2021-01-03 05:23

How to test Sinatra application which is using session?

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

This cod

相关标签:
4条回答
  • 2021-01-03 06:02

    Just ran into this problem and the solution is simply the order of requiring the files, so @fguillen was correct. At the top of your spec, make sure you require rack/test before your sinatra app, so at a minimum, this should get you started:

    # 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 讨论(0)
  • 2021-01-03 06:11

    It looks like the problem is actually to have enable :sessions activated.

    You have to deactivate this setting in order to be available to overwrite the session.

    The solution could be:

    # 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' }
    

    In the other hand to be able to check any session change that the action is expected to do we can send not a hash to the rack.session but a pointer to a hash so we can check after the action call if the hash has changed:

    # my_test.rb (in your test block)
    session = {}
    get '/', {}, 'rack.session' => session
    assert_equal 'value', session[:key]
    
    0 讨论(0)
  • 2021-01-03 06:20

    Like Philip suggested, it would work better to manually set the session variable before the get request.

    session[:foo] = 'blah'
    get "/"
    
    0 讨论(0)
  • 2021-01-03 06:20

    I finally figured it out by monkey patching Rack::Test::Session:

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

    0 讨论(0)
提交回复
热议问题