我正在使用Rails API应用程序中的reset_password方法。命中此端点后,将在ActiveJob中排队,这将触发对Mandrill(我们的交易电子邮件客户端)的请求。我目前正在尝试编写测试,以确保在命中 Controller 端点时正确地将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是否已排队。
目前,我的测试看起来像这样(我正在使用Factory girl创建用户):
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。
我在网络上找不到任何文档或任何有关如何进行测试的帮助,因此将不胜感激!
最佳答案
接受的答案对我不再有用,因此我在评论中尝试了Michael H.的建议,但仍然有效。
describe 'whatever' do
include ActiveJob::TestHelper
after do
clear_enqueued_jobs
end
it 'should email' do
expect(enqueued_jobs.size).to eq(1)
end
end
关于ruby-on-rails - 如何使用Rspec检查ActiveJob中排队的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26274954/