Как установить переменные сеанса в интеграционных тестах Rails - PullRequest
10 голосов
/ 13 сентября 2011

В интеграционных тестах Rails, как мне установить переменную сеанса (: user_id в моем случае)?

Очевидно, что тогда это не полный интеграционный тест, но, учитывая, что в моем приложении аутентификация пользователя не может происходить без ручногоВзаимодействие с пользователем, могу ли я как-нибудь обойтись и установить переменную сеанса вручную?

Пробовал следующее: «сессия» недоступна в этой области, open_session возвращает сеанс, который я не нашел способ обновить.

Ответы [ 2 ]

6 голосов
/ 07 июня 2012

Насколько я могу судить, ты не можешь. Значение сеанса в интеграционных тестах (в рельсах 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] с желаемым значением.

Это легко расширяется для передачи целых чисел, символов и т. Д. И, конечно же, несколько пар ключ / значение сеанса могут быть установлены одновременно. Не красиво, но неплохо.

1 голос
/ 13 сентября 2011

Почему аутентификация не может происходить без ручного взаимодействия? Использует ли он капчу? Если это так, заглушите эту часть для запуска в тестовой среде.

...