Прежде всего, Люк прав в том, что это проблема установки. Ошибка говорит вам, что модель User не может быть найдена, что, вероятно, означает, что Rails еще не загружен. Я не могу вспомнить точные детали того, как работают огурцы-рельсы, но одна из вещей, которые он делает, - убедиться, что каждый сценарий становится расширением интеграционного теста Rails. Это гарантирует, что вся автоматическая загрузка Rails состоялась и что эти вещи доступны.
Во-вторых, я бы посоветовал вам начать проще и использовать шаг для создания зарегистрированного пользователя вместо использования тега. Использование меток для установки является Огурцы антишаблоном.
1004 * И, наконец, более спорно, я бы предположить, что вы не используете заводскую-бот, когда cuking. FactoryBot использует отдельную конфигурацию для создания объектов модели непосредственно в хранилище данных. Это обходит любые логики приложения c вокруг создания этих объектов, что означает, что объекты, созданные FactoryBot, в конечном итоге будут отличаться от объектов, созданных вашим приложением. В реальной жизни создание объектов включает в себя такие вещи, как аудит, отправка электронных писем, условная логика c и c. и др c. Чтобы использовать FactoryBot, вы должны либо дублировать эту дополнительную логику создания c и поведение, либо игнорировать ее (оба варианта нежелательны).
Вы можете создавать объекты для более эффективного (и более быстрого) уничтожения, используя следующие pattern.
Каждый метод create в контроллере Rails делегирует свою работу сервисному объекту, например,
UserController
def create
@user = CreateUserService.new(params).call
end
end
Затем пусть ваши cukes используют вспомогательный модуль для создания вещей для вас. Этот модуль предоставит инструменты для ваших шагов по созданию пользователей, используя вышеуказанный сервис
module UserStepHelper
def create_user(params)
CreateUserService.new(default_params.merge(params))
end
def default_params
{
...
}
end
end
World UserStepHelper
Given 'there is a registered user' do
@registered_user = create_user
end
, а затем используйте этот шаг в фоновом режиме вашей функции, например
Background:
Given there is a registered user
And I am an admin
Scenario: Admin can see registered users
When I login and view users
Then I should see a user
Обратите внимание на отсутствие пометка здесь. Это нежелательно или не нужно здесь.
Вы можете увидеть расширение этого подхода в примере приложения, которое я сделал для выступления с CukeUp в 2013 году, здесь https://github.com/diabolo/cuke_up/commits/master. Если вы выполните этот коммит путем коммита, начиная с первого комета внизу, вы получите довольно хорошее руководство по настройке проекта rails с огурцом всего за первые 4 или 4 коммита. Если вы выполните его до конца (22 коммита), вы получите мощную основу c для создания и использования объектов модели при наведении. Я понимаю, что проект древний, и, очевидно, вам придется использовать современные версии всего, но принципы все еще применяются, и я использую этот подход во всей своей работе, и я делал это по крайней мере 10 лет.