Уже есть несколько вопросов о стековом потоке с возможными решениями, но ни один из них, похоже, не решил мою проблему, поэтому я задаю еще один, в надежде, что его достаточно c, чтобы его нельзя было закрыть как дубликат.
Я пытаюсь протестировать настроенную форму входа в систему, которая использует devise. Среда состоит из
- рельсов 6.0
- rspe c -рельсов 3.9
- капибара 3.31
- селен-webdriver 3.142.7
- database_cleaner 1.8
Следующее spe c не выполнено из-за ответа 401 Unauthorized
, при котором форма входа снова отображается с сообщением об ошибке, что учетные данные были неправильными.
require 'rails_helper'
feature 'Logging in' do
background do
FactoryBot.create :user, email: 'john.doe@example.com',
first_name: 'John',
password: 'password',
password_confirmation: 'password'
end
scenario 'with correct credentials' do
visit new_user_session_path
within('#user-sessions--new') do
find('#user_email').fill_in with: 'john.doe@example.com'
find('#user_password').fill_in with: 'password'
end
find('input[name="commit"]').click
expect(page).to have_content 'John'
end
end
Проверяя test.log
после временного отключения фильтров параметров для ведения журнала, я вижу, что пароль был отправлен правильно, и пользователь создается до того, как произойдет попытка входа, но аутентификация не удалась. При входе в сеанс интерактивной отладки и попытке входа в систему вручную в раскрученном браузере капибары, вход также не выполняется. Имя пользователя для входа по электронной почте и паролю работает в режиме разработки при создании того же пользователя через консоль. В настоящее время не используются никакие другие функции, которые могли бы повлиять на поведение при входе в систему (например, confirmable
).
Большинство вопросов, которые я нашел до сих пор, рекомендуют следующие пункты:
Отключить фиксации транзакций: My rails_helper.rb
уже содержит это;
RSpec.configure do |config|
config.use_transactional_fixtures = false
end
Настроить очиститель базы данных: Это было предложено в Не удалось протестировать Devise с Capybara и это уже имело место до того, как я начал реализовывать спецификации капибары;
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(
:truncation,
except: %w[ar_internal_metadata schema_migrations]
)
end
config.before :each do
DatabaseCleaner.start
end
config.after :each do
DatabaseCleaner.clean
end
end
Сейчас у меня нет другой идеи, почему этот сценарий может давать сбой, за исключением, может быть, среды, в которой тесты запускаются горячими, имея правильное подключение к базе данных. Если у кого-то есть идея, которая помогает, я буду рад ее услышать.