【发布时间】:2011-07-17 03:37:21
【问题描述】:
我正在尝试使用 Rack::Test 为我的 Sinatra 应用程序编写 RSpec 测试。我无法理解如何使用 cookie。例如,如果我的应用程序设置了 cookie(不是通过 :session),我如何检查该 cookie 是否设置正确?
另外,如何使用该 cookie 发送请求?
【问题讨论】:
标签: ruby cookies rspec sinatra rack
我正在尝试使用 Rack::Test 为我的 Sinatra 应用程序编写 RSpec 测试。我无法理解如何使用 cookie。例如,如果我的应用程序设置了 cookie(不是通过 :session),我如何检查该 cookie 是否设置正确?
另外,如何使用该 cookie 发送请求?
【问题讨论】:
标签: ruby cookies rspec sinatra rack
Rack::Test 保留了一个 cookie jar,它在请求中持续存在。您可以使用rack_mock_session.cookies 访问它。假设你有一个这样的处理程序:
get '/cookie/set' do
response.set_cookie "foo", :value => "bar"
end
现在你可以用这样的东西来测试它:
it 'defines a cookie' do
get '/'
rack_mock_session.cookie_jar["foo"].should == "bar"
end
您也可以使用last_request.cookies 访问 cookie,但顾名思义,它包含最后一个请求的 cookie,而不是响应。您可以使用set_cookie 设置cookie,并使用clear_cookies 清除它们。
it 'shows how to set a cookie' do
clear_cookies
set_cookie "foo=quux"
get '/'
last_request.cookies.should == {"foo" => "quux"}
end
更新:如果您希望 cookie jar 在测试用例中持续存在(it 块),您需要在执行任何测试用例之前初始化 Rack 会话。为此,请将此 before 挂钩添加到您的 describe 块中。
before :all do
clear_cookies
end
或者,例如,您可以使用before :each 在每次请求之前设置必要的 cookie。
【讨论】:
before :each 块。