У меня есть класс User
, который использует devise :confirmable
, который при создании пользователя вызывает отправку электронного письма со ссылкой для подтверждения. Это прекрасно работает в development
и production
, но не работает в среде test
(Minitest / Capybara). В частности, щелкнув ссылку подтверждения, вы получите **Forbidden** You don't have permission to access /users/confirmation on this server
.
Скриншот:
Запрещено У вас нет прав доступа / пользователей / подтверждения на этом сервере
Как ни странно, когда я создаю пользователя из rails console
, как и в интеграционном тесте, он работает. Итак, почему он не работает в среде test
?
Тест:
u = FactoryBot.create(:user)
email = ActionMailer::Base.deliveries.last
plain_part = email.multipart? ? (email.text_part ? email.text_part.body.decoded : nil) : email.body.decoded
confirmation_link = plain_part[/<a href="(http:\/\/.*)">Confirm my account<\/a>/,1]
puts "--- #{confirmation_link} ---" # visual check of extracted URL
visit confirmation_link # Forbidden You don't have permission...
save_and_open_screenshot # saves to tmp/capybara/capybara-*.png
А на консоли:
require 'factory_bot'
# factory creation code omitted from here
u = FactoryBot.create(:user)
# produces and renders link
Такие ссылки подтверждения выглядят так во всех средах, кроме test
:
http://localhost:3000/users/confirmation?confirmation_token=TxYdRmVzcuPE7PAx7yJh
... а в test
они выглядят так:
http://localhost/users/confirmation?confirmation_token=NqyaVL5EKEnz46zMzDQs
(Порт не указан в test
.)
Я использую Rails 5.2.0
с драйвером Capybara selenium_chrome_headless
в этих интеграционных тестах.