Браузеры не отправляют атрибуты cookie обратно на сервер . Вот почему вы можете отправить только пару ключ-значение в действие.
Поскольку вы можете предположить, что Rails, Rack и браузеры правильно работают с аргументами, все, что вам действительно нужно проверить, - это аргументы, которые ваш код передает CookieJar
.
Чтобы проверить правильность установки срока действия в контроллере, устанавливающем cookie , вы можете отключить метод #cookies
и убедиться, что ему переданы правильные настройки.
# app/controllers/widget_controller.rb
...
def index
cookies[:expiring_cookie] = { :value => 'All that we see or seem...',
:expires => 1.hour.from_now }
end
...
# spec/controllers/widget_controller_spec.rb
...
it "sets the cookie" do
get :index
response.cookies['expiring_cookie'].should eq('All that we see or seem...')
# is but a dream within a dream.
# - Edgar Allan Poe
end
it "sets the cookie expiration" do
stub_cookie_jar = HashWithIndifferentAccess.new
controller.stub(:cookies) { stub_cookie_jar }
get :index
expiring_cookie = stub_cookie_jar['expiring_cookie']
expiring_cookie[:expires].to_i.should be_within(1).of(1.hour.from_now.to_i)
end
...
Испытывает гораздо больше, чем это, кипит океан. В какой-то момент вы должны предположить, что стек, на котором вы сидите (например, Rails, Rack, веб-сервер, TCP / IP, ОС, веб-браузеры и т. Д.), Работает правильно и сосредоточиться на коде, которым вы управляете.