Я использую 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