Подтвердить что ты не робот

Использование Cookies с Rack:: Test

Я пытаюсь написать RSpec-тесты для моего приложения Sinatra, используя Rack:: Test. Я не могу понять, как я могу использовать файлы cookie. Например, если мое приложение устанавливает файлы cookie (а не через: session), как я могу проверить, правильно ли установлен этот файл cookie?

Также, как я могу отправлять запросы с этим файлом cookie?

4b9b3361

Ответ 1

Rack:: Test хранит куклу cookie, которая сохраняется по запросам. Вы можете получить доступ к нему с помощью 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

Вы также можете получить доступ к файлам cookie с помощью last_request.cookies, но, как сказано в названии, в нем содержатся файлы cookie для последнего запроса, а не ответ. Вы можете установить файлы cookie с помощью set_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 сохранялся в тестовых случаях (блоки it), вам необходимо инициализировать сеанс Rack перед выполнением любых тестовых случаев. Для этого добавьте этот before к вашему блоку describe.

before :all do
    clear_cookies
end

Альтернативно, вы можете, например, использовать before :each для настройки необходимых файлов cookie перед каждым запросом.