问:如何使用 Turnip、capybara 和 Gherkin 测试 ActionMailer Deliver_later
Posted
技术标签:
【中文标题】问:如何使用 Turnip、capybara 和 Gherkin 测试 ActionMailer Deliver_later【英文标题】:Q:How to test ActionMailer deliver_later with Turnip,capybara and Gherkin 【发布时间】:2019-03-16 01:12:36 【问题描述】:def deliver_mail
ServiceMailer.activation().deliver_later
end
deliver_mail 方法是从某个控制器调用的。
我想像下面这样进行测试 - 使用黄瓜和水豚进行功能测试。
step 'push next button' 执行 查找(“输入。提交”)。点击 结束
Feature: Sending a mail to user
Scenario: mail to a user
When I push next button
Then mail should be sent to a user
实际上,当按下'push next button'时,邮件是通过deliver_mail方法发送的。
当我使用deliver_now 而不是deliver_later 时,我可以测试上面的代码。
但是我将deliver_now改为deliver_later后,我无法测试。
所以我在下面引用。
http://chriswarren.github.io/rpsec/testing/2015/03/13/testing-emails-and-active-job-in-rspec-feature-tests.html
我尝试在规范文件中包含“ActiveJob::TestHelper”,例如“include ActiveJob::TestHelper”。
我修改了这样的步骤文件。
step 'push next button' do
perform_enqueued_jobs do
find("input.submit").click
end
end
但还是不行。
请提供任何提示和建议。
【问题讨论】:
那么如何测试邮件是否已发送?使用expect
语句向我们展示您的测试代码。
我添加了使用萝卜的期望语句。
【参考方案1】:
我建议不要在测试中延迟作业,然后检查应该运行的任何 DJ 的结果。
# rails_helper.rb
Delayed::Worker.delay_jobs = false
【讨论】:
【参考方案2】:我正在使用 Delayed::Job 在后台发送电子邮件,所以当我测试发送电子邮件时,我有两种不同的测试:
1) rspec
- 检查邮件正文(一般是邮件程序内部的方法)并发送邮件本身
2) cucumber
- 检查电子邮件作业是否已排队
在黄瓜中,我有以下代码:
Then(/^A welcome email will be sent$/) do
expect(Delayed::Job.count).to eq(1)
end
我认为没有必要从黄瓜中检查其他任何东西。
【讨论】:
以上是关于问:如何使用 Turnip、capybara 和 Gherkin 测试 ActionMailer Deliver_later的主要内容,如果未能解决你的问题,请参考以下文章