所以根据我的理解,我相信你这样做
Resque.inline = Rails.env.test?
您的 resque 任务将同步运行。我正在编写一个关于在after_commit
回调期间排队的 resque 任务的测试。
after_commit :enqueue_several_jobs
#class PingsEvent < ActiveRecord::Base
...
def enqueue_several_jobs
Resque.enqueue(PingFacebook, self.id)
Resque.enqueue(PingTwitter, self.id)
Resque.enqueue(PingPinterest, self.id)
end
在.perform
我的 Resque 任务类的方法中,我正在做一个Rails.logger.info
并且在我的测试中,我正在做类似的事情
..
Rails.logger.should_receive(:info).with("PingFacebook sent with id #{dummy_event.id}")
PingsEvent.create(params)
我对PingTwitter
和有相同的测试PingPinterest
。
我在第二个和第三个期望上都失败了,因为似乎测试实际上在所有 resque 作业运行之前就完成了。只有第一个测试真正通过。RSpec 然后抛出一个MockExpectationError
告诉我其他两个测试Rails.logger
没有收到的消息。.info
有人有过这方面的经验吗?
编辑
有人提到它的should_receive
行为类似于 a mock
,而我应该这样做.exactly(n).times
。很抱歉没有早点说清楚,但我对不同的it
区块有我的期望,我不认为should_receive
一个it
区块会在下一个区块模拟它it
?让我知道我是否错了。