Вход перед выполнением тестов в капибарах - PullRequest
0 голосов
/ 07 февраля 2020

Я хочу проверить мою функцию создания пользователя в ruby на рельсах с использованием капибары, но меня всегда перенаправляют на страницу входа. Есть ли способ, которым я могу проверить функцию создания без входа в систему?

`require 'rails_helper'

RSpe c .feature" Users ",: type =>: feature do before do # login_as (FactoryBot.create (: user)). @user = FactoryBot.create (: user) rescue StandardError => e ставит "# {e.message}" end end

it "Creates a new User" do
    begin
       visit user_session_path
        #visit "/"
            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"

    rescue StandardError => e
       puts "#{e.message}"
    end
end

end`

1 Ответ

0 голосов
/ 08 февраля 2020

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

Вы не можете проверить страницу в тесте функций, не войдя в систему (если только страница не требует входа пользователя), но используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...