Я тестирую метод подтверждения из контроллера, использующего RSpec, похоже, что тесты давят, потому что я не могу передать переменные сеанса при обращении к методу.
Вот моя спецификация:
RSpec.describe OauthCallbacksController, type: :controller do
describe 'POST #confirm_email' do
before do
request.env["devise.mapping"] = Devise.mappings[:user]
end
context 'confirms_email' do
let(:email) { 'test-email@test.ru' }
let(:confirm_email) { post :confirm_email, params: { email: email }, session: { auth: { uid: '12345', provider: 'facebook' } } }
it 'redirects to new_user_session_path' do
confirm_email
expect(response).to redirect_to new_user_session_path
end
it 'sends an email' do
expect { confirm_email }.to change{ ActionMailer::Base.deliveries.count }.by(1)
end
end
end
end
Метод verify_email:
def confirm_email
puts params[:email]
pending_user = User.find_or_init_skip_confirmation(params[:email])
if pending_user
aut = Authorization.where(provider: session[:auth]['provider'], uid: session[:auth]['uid'], linked_email: params[:email])
.first_or_initialize do |auth|
auth.user = pending_user
auth.confirmation_token = Devise.friendly_token[0, 20],
auth.confirmation_sent_at = Time.now.utc
end
if aut.save
OauthMailer.send_confirmation_letter(aut).deliver_now
redirect_to root_path, notice: "Great! Now confirm your email, we've sent you a letter!"
else
redirect_to root_path, alert: "Something went wrong. Please try again later or use another sign in method"
end
end
end
Когда я пытаюсь отобразить переменные сеанса, они nil
, в test.log очевидно, что переменные сеанса должны быть NULL-s.
[34mВЫБРАТЬ "полномочия". * ИЗ "полномочий" ГДЕ "полномочия". "Поставщик" НЕДЕЙСТВИТЕЛЕН И "полномочия". "Uid" НУЛЕВО И "полномочия". "Connected_email" = $ 1 ЗАКАЗАТЬ ПО "полномочиям"."id" ASC LIMIT $ 2 [0m [["connected_email", "test-email@test.ru"], ["LIMIT", 1]]
Я использую Rails 5.2.2.1 и RSpec3.8.
Я читал, что в Rails 5 есть проблема с доступом к сеансам, я уже пытался установить его с controller.session[:auth]['uid']
или request.session[:auth]['uid']
, но ничего