Я хочу отправить пользователям инструкции по подтверждению Devise во второй раз, если они не подтвердили в течение двух дней после регистрации, однако я не могу пройти тест успеха.
Фоновый рабочий процесс (запускается один раз в день):
class ResendConfirmationWorker
include Sidekiq::Worker
sidekiq_options queue: :resend_confirmation, retry: false
def perform
d = Time.zone.now - 2.days
users = User.where.not(confirmation_sent_at: nil)
.where(confirmed_at: nil)
.where(created_at: d.beginning_of_day..d.end_of_day)
users.find_each do |user|
user.send_confirmation_instructions
end
end
end
Тест RSpec:
require 'rails_helper'
describe ResendConfirmationWorker, type: :job do
before do
time = Time.zone.now - 2.days
@user = create :unconfirmed_user,
created_at: time,
confirmation_sent_at: time
end
def run_job
subject.perform
end
it 'resends a confirmation email to people who haven’t accepted it within two days' do
run_job
expect(Devise::Mailer.deliveries.count).to eq 1
end
end
Я всегда получаю 0 вместо 1. Я также пробовал смотреть на Sidekiq::Extensions::DelayedMailer.jobs.size
и Devise.mailer.deliveries.count
, но они также возвращают 0.
Наконец, я устанавливаю привязку в worker и запускаю user.send_confirmation_instructions
вручную:
[1] pry(#<ResendConfirmationWorker>)> user.send_confirmation_instructions
=> #<ActionMailer::DeliveryJob:0x007fc53f05c420
@arguments=
["Devise::Mailer",
"confirmation_instructions",
"deliver_now",
#<User id: 1, email: "[email protected]", created_at: "2017-01-05 04:40:13", updated_at: "2017-01-07 04:40:13", company_id: nil, name: "Unconfirmed User", invitation_token: nil, invitation_created_at: nil, invitation_sent_at: nil, invitation_accepted_at: nil, invitation_limit: nil, invited_by_type: nil, invited_by_id: nil, invitations_count: 0>,
"token1",
{}],
@job_id="9b5f6231-3194-4c57-9a6b-a38368cec603",
@priority=nil,
@queue_name="mailers">
Похоже, он правильно добавляет новое электронное письмо с инструкциями по подтверждению в очередь почтовой программы, так почему я не вижу его в своем тесте?
ResendConfirmationWorker.jobs.size
. - person Deepesh   schedule 07.01.2017