我正在使用 Rails API 应用程序中的 reset_password 方法。当这个端点被命中时,一个 ActiveJob 被排队,它将向 Mandrill(我们的事务性电子邮件客户端)发出一个请求。我目前正在尝试编写测试以确保在命中控制器端点时 ActiveJob 正确排队。
def reset_password
@user = User.find_by(email: params[:user][:email])
@user.send_reset_password_instructions
end
send_reset_password_instructions 在创建 ActiveJob 之前创建一些 url 等,其代码如下:
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 是否已排队。
目前我的测试看起来像这样(我正在使用工厂女孩来创建用户):
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。
我在网络上的任何地方都看不到有关如何对此进行测试的任何文档或帮助,因此将不胜感激任何帮助!