【问题标题】:ActiveJob instance freezes RSpec testActiveJob 实例冻结 RSpec 测试
【发布时间】:2017-01-06 19:54:09
【问题描述】:

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

after_create_commit { LogBroadcastJob.perform_later self }

我已将 perform 方法简化为返回 nil 以简化操作。

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

FactoryGirl.create :foo

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

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

也许相关:我不久前从 Rails 4.2 升级到了 5.0.0.1。

【问题讨论】:

  • Rails 5 围绕并发进行了一些更改。如果您使用的任何依赖项正在创建线程,那么您可能会遇到类重新加载的问题。 More info on this here.

标签: ruby rspec ruby-on-rails-5


【解决方案1】:

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

来清除这个问题
config.eager_load = true

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2021-12-12
    • 1970-01-01
    • 2022-12-22
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多