问:如何使用萝卜,水豚和小黄瓜测试ActionMailerliver_later

时间:2018-10-11 03:42:19

标签: ruby-on-rails ruby-on-rails-5 capybara-webkit rails-activejob turnip

def deliver_mail
  ServiceMailer.activation().deliver_later
end

deliver_mail方法是从某个控制器调用的。

我要进行如下测试-使用黄瓜和水豚进行功能测试。

按“按下一步”按钮   find(“ input.submit”)。click 结束

Feature: Sending a mail to user
  Scenario: mail to a user
    When I push next button
    Then mail should be sent to a user

实际上,当按下“下一个按钮”时,邮件是通过delivery_mail方法发送的。

当我使用liver_now而不是deliver_later时,我可以测试上面的代码。

但是在将delivery_now更改为delivery_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

但仍然无效。

请提供任何提示和建议。

2 个答案:

答案 0 :(得分:0)

我正在使用Delayed :: Job在后台发送电子邮件,因此当我测试发送电子邮件时,我有两种单独的测试:

1)rspec-检查电子邮件正文(通常是mailer中的方法)并发送电子邮件本身

2)cucumber-检查电子邮件作业是否已排队

在黄瓜中,我有以下代码:

Then(/^A welcome email will be sent$/) do
  expect(Delayed::Job.count).to eq(1)
end

我认为没有必要检查黄瓜上的其他东西。

答案 1 :(得分:0)

我建议不要延迟测试中的工作,然后检查应该运行的DJ的结果。

# rails_helper.rb

Delayed::Worker.delay_jobs = false