【发布时间】:2019-05-09 12:42:51
【问题描述】:
我有一个 rails 方法,它允许用户提交评论并向交易对手发送一封电子邮件,使用延迟的作业。
def update_review
@review.add_review_content(review_params)
ReviewMailer.delay.review_posted(@review.product_owner, params[:id])
end
我正在尝试为此添加rspec 测试,以检查邮件是否正确交付以及交付给谁。延迟的作业在 test 创建后立即运行,因为我希望其他作业(例如更新产品所有者总体评分的作业)立即完成。
所以电子邮件确实被解雇了,但我该如何为其添加测试?
编辑:添加当前测试
我目前的测试是:
describe 'PUT #update the review' do
let(:attr) do
{ rating: 3.0, raw_review: 'Some example review here' }
end
before(:each) do
@review = FactoryBot.create :review
put :update, id: @review.id, review: attr
end
it 'creates a job' do
ActiveJob::Base.queue_adapter = :test
expect {
AdminMailer.review_posted(@coach, @review.id).deliver_later
}.to have_enqueued_job
end
it { should respond_with 200 }
end
这确实测试了邮件程序是否正常工作,但我想测试它是否也可以在方法流中正确触发。
【问题讨论】:
标签: ruby-on-rails rspec actionmailer ruby-on-rails-4.2