Можно ли проверить домен, в котором был установлен файл cookie, с помощью интеграционных тестов Rails?
-
05-07-2019 - |
Вопрос
Я использую следующую технику для установки файла cookie с подстановочными знаками для нашего домена:
cookies['root_domain_flash_warning'] = {
'value' => 'mistakes have been made!',
'domain' => ".#{APP_DOMAIN}",
'expires' => 2.minutes.from_now
}
Что, кажется, работает легко. К сожалению, я не могу ничего искать, кроме значения, связанного с ключом 'value' в хэше, переданного CookieJar # [] =, потому что CookieJar # [] на самом деле не возвращает хэш опций, переданный его взаимный метод.
Кто-нибудь знает способ проверки домена, для которого был установлен файл cookie в функциональном тесте?
Решение
Вы можете проверить значение заголовка Set-Cookie
, который доступен в @ response.headers ['Set-Cookie']
. Р>
Попробуйте что-нибудь в этом духе:
def test_something
get '/my_action'
assert_equal ["root_domain_flash_warning=mistakes+have+been+made!; domain=.mydomain.com; path=/; expires=Fri, 07-Aug-2009 11:42:21 GMT"], @response.headers['Set-Cookie']
end
К сожалению, вы не можете извлечь эти значения из метода cookies
. В исходном коде ActionController :: Integration :: Session # process
( actionpack / lib / action_controller /gration.rb
) cookie-тесты интеграции представляют собой процессы, описанные ниже, которые извлекают только часть value
входного хэша:
(@headers['Set-Cookie'] || "").split("\n").each do |cookie|
name, value = cookie.match(/^([^=]*)=([^;]*);/)[1,2]
@cookies[name] = value
end