0

Есть ли способ в тестах интеграции, чтобы манипулировать датой истечения файла cookie (как проверить, правильно ли он принят). Например, если cookies['user_id'] уже существует в тесте, манипулировать им так:Можно ли установить, когда cookie истекает в тесте интеграции?

cookies['user_id'].expires = Time.zone.now - 1.day 

(это возвращает undefined method 'expires=')
Я использую MiniTest в Rails.

ответ

1

Вы можете использовать TimeCop для путешествий во времени в тесте:

def setup 
    do_something_which_sets_cookie 
    Timecop.freeze(1.month.from_now) 
    # or how ever long it takes the cookie to expire 
end 

def teardown 
    Timecop.return 
end 

Это может быть хороший подход, если то, что вы хотите проверить, как приложение ведет себя после периода времени, не связывая тест на осуществление подробности.

В противном случае вам просто необходимо убедиться, что куки существует перед установкой истечения:

cookies['user_id'].expires = Time.zone.now - 1.day if cookies['user_id'] 
+0

Благодаря @Max, я хотел бы посмотреть на TimeCop позже и первым попробовать свою последнюю строку. Однако, похоже, это не работает. 'cookies ['remember_token']' возвращает '' Vp8FxZSymqttPLN7S6wcA'', поэтому файл cookie существует. Но 'cookies ['remember_token']. Expires = Time.zone.now - 1.day' возвращает ошибку' undefined method 'expires =' для "Vp8FxZSymqttPLN7S6wcA": String'. – Marty

+0

Я не работал с файлами cookie в рельсах, но вы пробовали настроить cookie с хешем, как в документах: 'cookies ['remember_token'] = {значение: cookies ['remember_token'], expires: Time.zone. теперь - 1.day} '. Я считаю, что не может манипулировать файлом cookie на месте - вам нужно выдать клиенту новый файл cookie. http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html – max

Смежные вопросы