我正在使用Resque处理我的后台作业。
class SomeClass
...
repo = Repo.find(params[:repo_id])
Resque.enqueue(ReopCleaner, repo.id)
...
end
class RepoCleaner
@queue = :repo_cleaner
def self.perform(repo_id)
puts "this must get printed in console"
repo = Repo.find(repo_id)
# some more action here
end
end
现在,为了同步测试,我添加了
Resque.inline = Rails.env.test?
在config/initializers/resque.rb文件中
这应该是内联调用#perform方法,而不是将其排队到Redis中,并且没有任何Resque回调,因为Rails.env.test?在测试环境中返回true。
但是
"this must get printed in console"
在测试时从不打印。我的测试也失败了。
是否有我错过的配置。目前我正在使用
resque (1.17.1)
resque_spec (0.7.0)
resque_unit (0.4.0)
3条答案
按热度按时间khbbv19g1#
我个人测试我的工作者不同。我使用RSpec,例如在我的用户模型中,我测试了这样的东西:
然后我有一个名为spec/workers/foo_worker_spec.rb的文件,内容如下:
这样你的模型/控制器测试运行得更快,并且你在测试中没有模型/控制器和worker之间的依赖关系。你也不必在规范中模拟那么多与worker无关的东西。
但是如果你不想像你提到的那样去做,它在我之前的时候是有效的,我把Resque.inline = true放到了我的测试环境配置中。
aelbi1ox2#
看起来关于日志记录的问题从来没有得到过回答。我遇到了类似的事情,这是因为没有设置Resque记录器。你可以做一些简单的事情:
或者你可以通过将其添加到/lib/tasks/resque. rake来设置一个单独的日志文件。
像上面提到的daniel-spangenberg这样的嘲笑应该写STDOUT,除非你的方法在你的类的“私有”部分。这在写rspec测试时让我绊倒了几次。ActionMailer也需要它自己的日志设置。我想我一直期待更多的约定而不是配置。:)
6g8kf2rb3#
在spec_helper.rb
您可以添加
我也遇到了同样的问题,上面的解决了。