测试使用会话的 Sinatra 应用程序

Seb*_*ian 5 testing session rack sinatra

如何测试使用会话的 Sinatra 应用程序?

get "/", {}, {'rack.session' =>  { 'foo' => 'blah' } }
Run Code Online (Sandbox Code Playgroud)

这段代码对我不起作用,我在我的应用程序中有“启用:会话”。

fgu*_*len 5

看起来问题实际上是已经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' }
Run Code Online (Sandbox Code Playgroud)

另一方面,为了能够检查该操作预期执行的任何会话更改,我们可以不向rack.session发送散列,而是向散列发送一个指向散列的指针,以便我们可以在操作调用后检查散列是否已更改:

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


jer*_*son -1

就像 Philip 建议的那样,在获取请求之前手动设置会话变量会更好。

session[:foo] = 'blah'
get "/"
Run Code Online (Sandbox Code Playgroud)

  • `NameError:未定义的局部变量或方法'会话'` (5认同)