Q: Как протестировать ActionMailer delivery_later с репой, капибарой и огурцом - PullRequest
0 голосов
/ 11 октября 2018
def deliver_mail
  ServiceMailer.activation().deliver_later
end

метод delivery_mail вызывается с некоторого контроллера.

Я хочу проверить, как показано ниже - тестирование функции с использованием огурца и капибары.

шаг «нажать следующую кнопку» действительно найти (»input.submit "). нажмите end

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.

, когда я использую delivery_now вместо delivery_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' как 'включить ActiveJob :: TestHelper' в файл спецификации.

, и я изменил файл шага следующим образом.

step 'push next button' do
  perform_enqueued_jobs do
    find("input.submit").click
  end
end

, но по-прежнему не показывает 't работа.

любые намеки и советы, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Я бы порекомендовал не откладывать задания в тесте, а затем проверять результаты того, что DJ должен был запустить.

# rails_helper.rb

Delayed::Worker.delay_jobs = false
0 голосов
/ 11 октября 2018

Я использую Delayed :: Job для отправки писем в фоновом режиме, поэтому, когда я проверяю отправку писем, у меня есть два отдельных вида тестов:

1) rspec - для проверки тела письма (вВообще, метод внутри почтовой программы) и отправка самого электронного письма

2) cucumber - чтобы проверить, было ли задание электронной почты поставлено в очередь

В огурце у меня есть следующий код:

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

Я думаю, что нет необходимости проверять что-либо еще из огурца.

...