为什么我不能在Rails 5中测试电子邮件发送?

时间:2018-02-09 03:07:19

标签: cucumber ruby-on-rails-5 actionmailer

我尝试使用cucumber并使用ActionMailer guideTesting guide使用以下简单案例在简单的Rails 5应用中测试电子邮件发送。你能帮我看看它为什么不起作用吗?

应用程序/邮寄者/ test_mailer.rb

class TestMailer < ApplicationMailer
  def welcome_email
    @greeting = "Hi"
    mail to: "to@example.org", subject: 'welcome!'
  end
end

特征/ test.feature

Feature: test email

  Background:
    Given we say "hello"

  Scenario: send mail
    Given 0 email is in the queue
     Then send an email
    Given 1 email is in the queue

特征/步骤/ test_steps.rb

Given "we say {string}"  do |say_it|
  puts say_it
end

Given "{int} email is in the queue"  do |mail_count|
  puts "method    : #{ActionMailer::Base.delivery_method}"
  puts "deliveries: #{ActionMailer::Base.perform_deliveries}"
  ActionMailer::Base.deliveries.count.should eq mail_count
end

Then "send an email"  do
  TestMailer.welcome_email.deliver_later
end

它不断响应队列中没有任何项目。

2 个答案:

答案 0 :(得分:1)

不要发送_later,立即发送。如果您使用deliver_later,则必须先运行后台作业,然后才能将邮件添加到队列中

答案 1 :(得分:0)

在我对@diabolist的回复中,我不得不修改我的黄瓜测试设置以支持#f07c00而不是:async。这需要:

配置/环境/ test.rb

:inline

特征性/支撑性/ env.rb

...
config.active_job.queue.adapter = :test
...

我意识到我可能刚刚将我的测试适配器切换到... World( ActiveJob::TestHelper ) Around() do |scenario, block| perform_enqueued_jobs do block.call end end ,但这会让我稍后进行一些队列测试 - 特别是使用:inline方法。