ActiveJob 实例冻结 RSpec 测试

ActiveJob instance freezes RSpec test

我的模型 Foo 有一个 after_create_commit 回调,如下所示:

after_create_commit { LogBroadcastJob.perform_later self }

我已将 perform 方法缩减为 return nil 以简化操作。

当我使用 factory_girl 在 RSpec 测试中创建 Foo 实例时,测试套件冻结。只有当我使用该回调测试模型时才会发生这种情况。

FactoryGirl.create :foo

当我 Ctl+C 退出我的测试套件时,它无法终止进程。我必须找到仍在使用我的数据库 (Postgresql) 的进程,然后终止它,这意味着我在命令行上看不到任何错误。如果我再次 运行 我的测试套件,它会创建另一个我必须找到并终止的进程。

这听起来很熟悉吗?我如何在这里找到有用的错误?

可能相关:我不久前从 Rails 4.2 升级到 5.0.0.1。

这是一个并发问题。感谢@coreyward 评论中提供的资源,我能够通过将 config/environments/test.rb 设置为

来解决这个问题
config.eager_load = true

这与我在 config/environments/development.rb 中的配置不同(并且一切都在开发中),所以我不能说我明白它为什么有效。但我现在可以 运行 我所有的测试 bundle exec guardbundle exec rake spec.