Kat*_*tie 3 integration-testing ruby-on-rails rails-activejob
我正在使用 Rails 5.1.6 和 Ruby 2.5.1(尽管在以前的版本中出现了相同的错误)。
将邮件程序从 Deliver_now 切换到 Deliver_later。在我的浏览器中工作正常,但是我一直在尝试让我的集成测试正常工作。似乎使用ActiveJob::TestHelper 中的任何方法都会触发以下错误:
错误:SendJobToContactsTest#test_send_job_to_contacts:SystemStackError:堆栈级别太深
集成测试代码:
require 'test_helper'
include ActiveJob::TestHelper
class SendJobToContactsTest < ActionDispatch::IntegrationTest
...
end
Run Code Online (Sandbox Code Playgroud)
这工作正常:
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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
即使只是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
Run Code Online (Sandbox Code Playgroud)
事实证明,即使只是调用一个空的 Perform_enqueued_jobs 块(不涉及我的任何代码)也会触发堆栈级别太深的问题:
perform_enqueued_jobs do
# do something later
end
Run Code Online (Sandbox Code Playgroud)
事实证明问题出在我的 include 声明的位置。将其移动到类中解决了这个问题:
require 'test_helper'
class SendJobToContactsTest < ActionDispatch::IntegrationTest
include ActiveJob::TestHelper
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |