Использование Cookies с Rack :: Test - PullRequest
13 голосов
/ 17 марта 2011

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

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

1 Ответ

19 голосов
/ 17 марта 2011

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

...