我有一个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_subscribe
和subscribe_email
只是制作一些实例变量并调用mail
。
抛出一些调试器,我可以看到我希望被击中的系统的所有部分看起来都是这样。
我希望这总是发送两封电子邮件(如果我做错了,则发送零电子邮件)。
我得到的回报始终是1封电子邮件。
我收到的电子邮件是user_subscribe
。
答案 0 :(得分:1)
我找到了解决方案。
我使用Rails 5,在4到5之间,config.active_job.queue_adapter
的默认行为发生了变化。
将config.active_job.queue_adapter = :inline
添加到config/environments/test.rb
修复此问题。它现在可以准确计算发送的电子邮件。