У меня была та же проблема, она была подключена к поддоменам .
Ключом сеанса был "lvh.me", но в тестах по умолчанию использовался "example.com".
Мой тест отправлял форму входа правильно, пользователь не прошел проверку подлинности, затем Devise перенаправлял на домашнюю страницу в домене "example.com", и приложение не смогло найти данные сеанса (которые находились в разделе "lvh.me "), и перенаправлял обратно на страницу входа без каких-либо флеш-сообщений или ошибок.
Так что, если вы используете субдомены, обязательно установите хосты Capybara до вход пользователя в систему. Просто для примера вот что я делаю:
def go_to(subdomain)
Capybara.app_host = "http://#{subdomain}.lvh.me"
Capybara.server_port = 3000
host! "#{subdomain}.lvh.me:3000"
end