fea*_*ool 5 rspec ruby-on-rails delayed-job
我想验证delayed_job回调挂钩是否被调用,但我没有看到如何让RSpec执行它,特别是当涉及几层类时.
假设我有一个像这样的ActiveRecord模型:
class MyJob < ActiveRecord::Base
def perform
# do some stuff
end
def after(job)
# called by delayed_job after perform completes
end
end
Run Code Online (Sandbox Code Playgroud)
从概念上讲,我希望沿着这些方向进行RSpec测试(虽然我知道这不正确):
it 'should call the :after callback hook' do
my_job = MyJob.create
my_job.should_receive(:after).with(an_instance_of(Delayed::Backend::ActiveRecord::Job))
Delayed::Job.enqueue(my_job)
Delayed::Worker.new.work_off
end
Run Code Online (Sandbox Code Playgroud)
我仔细研究了stackoverflow,relishapp.com/rspec以及我能想到的所有其他地方.这不可能太难了吧?(我打赌@zetetic在睡梦中知道答案......;)
(警告:我的实际案例使用MyJob和DJ之间的"垫片"课程.这个简单案例的答案可能会触发更复杂的后续行动!)
小智 1
恕我直言,我不认为这是最好的事情......
通过这样做,您正在尝试规范 DelayedJob 的行为,而不是您的应用程序,并且 DJ 已经有了自己的测试套件。
不管怎样,嘲笑 DelayedJob 本身怎么样?也许您可以通过这样做指定您的 MockedJob 将在处理后调用您的钩子,并且您可以相应地创建匹配器/期望...
| 归档时间: |
|
| 查看次数: |
1751 次 |
| 最近记录: |