Прежде всего, каждый из ваших сценариев должен будет войти в систему и создать новый сеанс. Это цена, которую вы платите за тестирование. Стоимость этого во время выполнения должна быть относительно небольшой при стандартном процессе входа в систему, поскольку большинство экранов входа в систему просты, имеют короткое время рендеринга и очень небольшой доступ к БД. Это действительно очень плохая идея - хранить и поддерживать время выполнения здесь, пытаясь разделить сеансы между сценариями.
Чтобы привести в порядок свои хитрости, вы можете следовать ответу Даниэля, но вместо того, чтобы вкладывать шаги, я бы порекомендовал извлечь код для вспомогательного метода и вызвать его вместо этого.
Чтобы сделать это элегантно с властью, то есть иметь дело с разными пользователями с ролями и дополнительными атрибутами, вам нужно сделать немного больше. Вы можете увидеть подробный пример этого здесь (https://github.com/diabolo/cuke_up).
Чтобы использовать это эффективно, следите за историей коммитов и сосредоточьтесь в основном на папке возможностей.
У этого есть некоторый структурный код, который позволяет вам регистрировать / создавать пользователей, а затем использовать их во множестве различных конфигураций. Есть некоторый базовый код, который немного сложен, что дает вам возможность создавать пользователей, которые знают свои собственные пароли, а также добавлять другие атрибуты, такие как роли.
Конечным результатом является то, что вы можете написать определение шага, например
Given I am registered
Given I am an admin
Given I am logged in
Given I am logged in as an admin
которые реализованы как
Given 'I am registered' do
@i = create_user
end
Given 'I am an admin' do
@i = create_user role: 'admin'
end
Given 'I am logged in' do
@i = create_user
login as: @i
end
Given 'I am logged in as an admin' do
@i = create_user role: 'admin'
login as: @i
end
примечание: переменная @i используется для передачи пользователя от одного шага к следующему
Вам не нужно беспокоиться о повторении, поскольку все шаги вызывают вызовы одних и тех же вспомогательных методов. Вы можете использовать шаблоны, показанные здесь, в гораздо более широком контексте, чтобы упростить ваши функции /