gpt4 book ai didi

ruby-on-rails - 调用 ActiveJob::TestHelper 方法会导致 SystemStackError:堆栈级别太深

转载 作者:行者123 更新时间:2023-12-05 02:16:34 27 4
gpt4 key购买 nike

我使用的是 Rails 5.1.6 和 Ruby 2.5.1(虽然在以前的版本中有同样的错误)。

将邮件程序从 deliver_now 切换到 deliver_later。在我的浏览器中运行良好,但是我一直在尝试让我的集成测试正常工作。似乎使用 ActiveJob::TestHelper 中的任何方法会触发以下错误:

Error: SendJobToContactsTest#test_send_job_to_contacts: SystemStackError: stack level too deep

集成测试代码:

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 block (不涉及我的代码)也会触发堆栈级别太深的问题:

perform_enqueued_jobs do
# do something later
end

最佳答案

原来问题出在我有包含语句的地方。在类里面移动它解决了这个问题:

require 'test_helper'


class SendJobToContactsTest < ActionDispatch::IntegrationTest
include ActiveJob::TestHelper

关于ruby-on-rails - 调用 ActiveJob::TestHelper 方法会导致 SystemStackError:堆栈级别太深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49637767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com