12
我正在尝试使用Rack :: Test为我的Sinatra应用编写RSpec测试。我无法理解我如何使用Cookie。例如,如果我的应用程序设置了cookie(不是通过:session),我该如何检查该cookie是否设置正确?在机架上使用饼干::测试
另外,如何使用该cookie发送请求?
我正在尝试使用Rack :: Test为我的Sinatra应用编写RSpec测试。我无法理解我如何使用Cookie。例如,如果我的应用程序设置了cookie(不是通过:session),我该如何检查该cookie是否设置正确?在机架上使用饼干::测试
另外,如何使用该cookie发送请求?
Rack :: Test保留了一个cookie jar,它保留了请求。您可以通过rack_mock_session.cookies
访问它。比方说,你有一个这样的处理程序:
it 'defines a cookie' do
get '/'
rack_mock_session.cookie_jar["foo"].should == "bar"
end
您也可以访问饼干last_request.cookies
,但正如其名字所示,它包含:
get '/cookie/set' do
response.set_cookie "foo", :value => "bar"
end
现在你可以用这样的测试cookies的最后请求,而不是响应。您可以使用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
更新:如果你想饼干罐跨越测试用例(it
块)仍然存在,则需要执行任何测试用例之前初始化机架会议。为此,请将此before
挂钩添加到您的describe
块。
before :all do
clear_cookies
end
替代,例如,你可以使用before :each
每个请求之前设置必要的饼干。
好的,现在我看到cookie已正确设置,但是当我请求路由时需要有效的cookie - 我得到了错误。 (如果cookie未设置或不正确,则服务器返回401错误) – Andoriyu 2011-03-18 06:49:09
UPD。 rack_mock_session.cookie_jar [“foo”]只在一篇文章中为空,在下一次测试中它是空的。 – Andoriyu 2011-03-18 06:57:24
UPD。通过在全局变量中存储cookie来解决问题,所以在每次请求之前设置cookie。 – Andoriyu 2011-03-18 07:00:59