Я работаю над методом reset_password в приложении Rails API. Когда эта конечная точка попадает, очередь ActiveJob ставится в очередь, которая сгорит запрос Mandrill (наш клиент транзакций электронной почты). В настоящее время я пытаюсь написать тесты, чтобы убедиться, что ActiveJob правильно поставлен в очередь при ударе конечной точки контроллера.
def reset_password
@user = User.find_by(email: params[:user][:email])
@user.send_reset_password_instructions
end
Send_reset_password_instructions создает некоторый url и т.д., прежде чем создавать ActiveJob, код которого ниже:
class SendEmailJob < ActiveJob::Base
queue_as :default
def perform(message)
mandrill = Mandrill::API.new
mandrill.messages.send_template "reset-password", [], message
rescue Mandrill::Error => e
puts "A mandrill error occurred: #{e.class} - #{e.message}"
raise
end
end
В настоящий момент мы не используем адаптеры для ActiveJob, поэтому просто хочу проверить с Rspec, что ActiveJob поставлен в очередь.
В настоящее время мой тест выглядит примерно так (я использую девушку factory для создания пользователя):
require 'active_job/test_helper'
describe '#reset_password' do
let(:user) { create :user }
it 'should create an ActiveJob to send the reset password email' do
expect(enqueued_jobs.size).to eq 0
post :reset_password, user: { email: user.email }
expect(enqueued_jobs.size).to eq 1
end
end
Все работает на самом деле, мне просто нужно создать тесты!
Я использую ruby 2.1.2 и rails 4.1.6.
Я не вижу никакой документации или помощи в любом месте в Интернете о том, как протестировать это, поэтому любая помощь будет принята с благодарностью!