首页 > 解决方案 > Ruby on Rails 和 Sidekiq redis 连接池与并行测试?

问题描述

我想并行运行我的 Rails 测试。我目前正在使用 Sidekiq 自己的连接池与 redis 通信。这里的问题是,如果我运行并行测试,它们会相互冲突。Rails 有一个非常好的内置测试数据库系统,它为执行测试的每个线程创建 postgresql 的数据库克隆。我将如何使用 Sidekiq redis 连接池来做到这一点?

标签: ruby-on-railsrubytestingredissidekiq

解决方案


您的测试根本不应该连接到 redis。就像在测试环境中处理电子邮件的方式一样,默认情况下,Sidekiq 将为测试环境中的任何计划作业使用假队列。

基本上 - 并行运行测试不会导致 Sidekiq 作业出现任何问题。

您应该首先阅读有关测试的文档 - https://github.com/mperham/sidekiq/wiki/Testing

本质上,您可以测试以查看是否已使用以下方式安排了作业:

HardWorker.perform_async(1, 2)
HardWorker.perform_async(2, 3)
assert_equal 2, HardWorker.jobs.size

如果您需要运行作业,只需排空队列:

HardWorker.drain
assert_equal 0, HardWorker.jobs.size

更多详细信息请参见上面的链接。


推荐阅读