Насколько я могу судить, ты не можешь. Значение сеанса в интеграционных тестах
(в рельсах 3.2.2) это копия. (Rails боги: пожалуйста, поправьте меня, если я
неправильно.) Вы можете установить значение, но оно не повлияет на следующее получение / публикацию
потому что это локальная копия реального сеанса. Отлично подходит для проверки утверждений,
не очень хорош для сохранения состояния в сеансе во время интеграционного теста.
У меня есть тестовый контроллер для поддержки моего тестирования JavaScript через Evergreen.
Мое решение состояло в том, чтобы добавить метод к моему тестовому контроллеру и доступный маршрут
когда я НЕ работаю, это позволяет мне устанавливать значения сеанса.
В основном мой метод app_test # set_session отображает имена параметров
для префикса, если префикс найден, то значение сеанса для
задан префикс раздельного имени параметра. Что-то вроде:
params.each() do |key, value|
next if ( key !~ /^set_session_/)
session[ key.slice( ("set_session_".size())..-1).to_sym ] = value
end
# don't forget to render something/anything
Итак, чтобы установить переменные сеанса во время интеграционных тестов, у меня есть небольшой
кусок кода как:
prefix = "set_session_"
post( "/set_session.html", { (prefix + "user_id") => "My Name Is Mudd" } )
Не так красиво, как "session [: user_id] = 'My Name Is Mudd'", но это работает.
Мой следующий пост / get будет видеть сессию [: user_id] с желаемым значением.
Это легко расширяется для передачи целых чисел, символов и т. Д. И, конечно же,
несколько пар ключ / значение сеанса могут быть установлены одновременно. Не красиво, но
неплохо.