如何准确计算在Rails Cucumber Tests中发送的多封电子邮件

时间:2017-05-04 09:53:34

标签: ruby-on-rails rspec cucumber actionmailer

我有一个Cucumber测试,驱逐一个完成表单的人,其输出应该是两封电子邮件(一封给用户,一封给一个管理员)。

设置

关注this guide我在标有@email的任何情景周围设置了一个包装。

Around('@email') do |_scenario, block|
  ActionMailer::Base.delivery_method = :test
  ActionMailer::Base.perform_deliveries = true
  ActionMailer::Base.deliveries.clear
  block.call
end

ActionMailer::Base.delivery_method = :test已在我的config/environments/test.rb文件中设置。

该场景看起来像这样(编辑以删除业务措辞)

@email
Scenario: Can find out more
  Given I am a visitor
  When I visit a page
  And I complete the form
  Then I should get an email, as should the admin

相关定义是;

When(/^I complete the form$/) do
  fill_in('Email Address', with: 'test@test.com')
  fill_in('Name', with: 'Test Name')
  click_button('Subscribe')
end

Then(/^I should get an email, as should the admin$/) do
  expect(ActionMailer::Base.deliveries.size).to eq 2
end

守则

此代码适用于本地干运行,而不是在测试中。

def subscribe
  SubscribeMailer.user_subscribe(params[:email]).deliver_later

  SubscribeMailer.subscribe_email(params[:name],
                                  params[:email],
                                  request.referrer).deliver_later
  redirect_to subscribe_thanks_path
end

user_subscribesubscribe_email只是制作一些实例变量并调用mail

抛出一些调试器,我可以看到我希望被击中的系统的所有部分看起来都是这样。

预期结果

我希望这总是发送两封电子邮件(如果我做错了,则发送零电子邮件)。

实际结果

我得到的回报始终是1封电子邮件。

我收到的电子邮件是user_subscribe

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。

我使用Rails 5,在4到5之间,config.active_job.queue_adapter的默认行为发生了变化。

config.active_job.queue_adapter = :inline添加到config/environments/test.rb修复此问题。它现在可以准确计算发送的电子邮件。