Не совсем ясно, говорите ли вы о пользователе, у которого есть права на создание других пользователей, или у вас просто есть страница регистрации пользователя в вашем приложении. Первая часть этого ответа относится к первой.
Вы не можете проверить страницу в тесте функций, не войдя в систему (если только страница не требует входа пользователя), но используя Devise помощники, вы можете пропустить шаг фактического перехода на страницу входа и входа в систему. См. https://github.com/heartcombo/devise/wiki/How-To: - Test-with-Capybara
Где бы вы ни настраивали RSpe c include помощники начальника
RSpec.configure do |config|
config.include Warden::Test::Helpers
end
Затем в своем тесте используйте помощник login_as
, чтобы войти в систему как пользователь с правами на создание пользователя
...
login_as(FactoryBot.create(:admin)) # assumes you have a factory named `admin` that will create a user with the permissions to create other users
visit 'whatever page allows creating a new user'
new_user = FactoryBot.build(:user) # don't create here because you don't want it saved
fill_in "first_name", with: new_user.first_name
fill_in "middle_name", with: new_user.middle_name
fill_in "last_name", with: new_user.last_name
fill_in "username", with: new_user.username
click_button "Create User"
expect(page).to have_text "Successfully created new user!"
...
Для второго Интерпретация вашего вопроса: если у вас просто есть страница регистрации, где люди могут создать пользователя, то у вас либо неправильно установлены требования к аутентификации для действия контроллера, либо тот факт, что вы создаете пользователя в БД перед заполнением в информации в пользовательском интерфейсе создается столкновение на уникальном поле. Это можно исправить, просто собрав пользователя FactoryBot, а не создав
...
user = FactoryBot.build(:user) # will build a valid user but won't commit it to the DB
fill_in :first_name, with: user.first_name
fill_in "middle_name", with: user.middle_name
fill_in "last_name", with: user.last_name
fill_in "username", with: user.username
click_button "Create User"
# expectation on whatever should happen in the UI goes here