【问题标题】:Q:How to test ActionMailer deliver_later with Turnip,capybara and Gherkin问:如何使用 Turnip、capybara 和 Gherkin 测试 ActionMailer Deliver_later
【发布时间】: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 语句向我们展示您的测试代码。
  • 我添加了使用萝卜的期望语句。

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


【解决方案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
    

    我认为没有必要从黄瓜中检查其他任何东西。

    【讨论】:

      猜你喜欢
      • 2018-07-01
      • 2019-04-10
      • 2015-07-03
      • 1970-01-01
      • 2015-11-11
      • 2011-05-07
      • 1970-01-01
      • 2020-01-06
      • 2017-05-18
      相关资源
      最近更新 更多