Я работаю над некоторыми историями огурца для приложения "зарегистрироваться", которое имеет несколько шагов.
Вместо того, чтобы писать историю Huuuuuuuge, чтобы охватить все шаги сразу, что было бы плохо, я предпочел бы работать через каждое действие в контроллере, как обычный пользователь. Моя проблема заключается в том, что я храню идентификатор учетной записи, который создается на первом шаге в качестве переменной сеанса, поэтому, когда посетитель переходит к шагу 2, шаг 3 и т.д., Загружаются существующие данные регистрации.
Мне известно, что я могу получить доступ к controller.session[..]
в спецификациях RSpec, однако, когда я пытаюсь сделать это в истории огурца, он терпит неудачу со следующей ошибкой (и, я также читал, что это анти-шаблон и т.д....):
Использование controller.session [: whatever] или session [: whatever]
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.session (NoMethodError)
Использование сеанса (: независимо)
wrong number of arguments (1 for 0) (ArgumentError)
Итак, похоже, что сеансовый магазин невозможен. Мне интересно, возможно ли это (и я думаю, что было бы лучше...):
- Выделите хранилище сеансов и т.д.
- Имейте метод внутри контроллера и заглушите его (например,
get_registration
, который присваивает переменную экземпляра...)
Я просмотрел книгу RSpec (ну, снял) и просмотрел WebRat и т.д., но я не нашел ответа на свою проблему...
Чтобы уточнить немного больше, процесс регистрации больше похож на конечный автомат - например, пользователь проходит через четыре шага до завершения регистрации - поэтому "вход в систему" на самом деле не является вариантом (он нарушает модель работы сайта)...
В моем спецификации для контроллера я смог заглушить вызов метода, который загружает модель на основе сеанса var - но я не уверен, что линия "antipattern" также применяется к окуркам, а также к mocks
Спасибо!