Вызов методов ActiveJob :: TestHelper вызывает SystemStackError: слишком глубокий уровень стека

Я использую Rails 5.1.6 и Ruby 2.5.1 (хотя в предыдущих сборках была такая же ошибка).

Переключение почтовой программы с delivery_now на delivery_later. В моем браузере работает нормально, но я застрял, пытаясь заставить работать свои интеграционные тесты. По-видимому, использование любых методов из ActiveJob :: TestHelper вызывает следующую ошибку:

Ошибка: SendJobToContactsTest # test_send_job_to_contacts: SystemStackError: слишком глубокий уровень стека

Код интеграционного теста:

require 'test_helper'
include ActiveJob::TestHelper

class SendJobToContactsTest < ActionDispatch::IntegrationTest
...
end

Это отлично работает:

assert_difference 'ContactJob.count', 1 do
    patch update_contacts_user_job_path(@user, @job), params: {job: {contact_ids: [ @contact2.id], message: {message_text: "This is a test"}}}
end

Использование performed_enqueued_jobs вызывает SystemStackError:

assert_difference 'ContactJob.count', 1 do
  perform_enqueued_jobs do
     patch update_contacts_user_job_path(@user, @job), params: {job: {contact_ids: [ @contact2.id], message: {message_text: "This is a test"}}}
  end
end

Даже просто assert_enqueued_jobs без performed_enqueued_jobs вызывает SystemStackError:

assert_difference 'ContactJob.count', 1 do
  patch update_contacts_user_job_path(@user, @job), params: {job: {contact_ids: [ @contact2.id], message: {message_text: "This is a test"}}}
  assert_enqueued_jobs 1
end

И оказывается, что даже простой вызов пустого блока perform_enqueued_jobs (без участия моего кода) вызывает слишком глубокую проблему уровня стека:

perform_enqueued_jobs do
 # do something later
end

person Katie    schedule 03.04.2018    source источник


Ответы (2)


Оказывается, проблема заключалась в том, где у меня был оператор include. Перемещение внутри класса решило проблему:

require 'test_helper'


class SendJobToContactsTest < ActionDispatch::IntegrationTest
  include ActiveJob::TestHelper
person Katie    schedule 04.04.2018

Я столкнулся с той же проблемой, используя синтаксис спецификации:

до:

require 'test_helper'
include ActiveJob::TestHelper

describe MyJob do
...

исправить:

require 'test_helper'

describe MyJob do
  include ActiveJob::TestHelper
person johansenja    schedule 26.09.2019