だから私の理解に基づいて、あなたがするとき私は信じています
Resque.inline = Rails.env.test?
resqueタスクは同期的に実行されます。コールバック中にエンキューを取得するresqueタスクのテストを書いていafter_commitます。
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
.performResqueタスククラスの方法では、私はを実行Rails.logger.infoしています。テストでは、次のようなことを実行しています。
..
Rails.logger.should_receive(:info).with("PingFacebook sent with id #{dummy_event.id}")
PingsEvent.create(params)
そして、私はとについて同じテストをPingTwitterしていPingPinterestます。
すべてのresqueジョブが実行される前にテストが実際に終了したように見えるため、2番目と3番目の期待値で失敗します。最初のテストだけが実際に合格します。次に、RSpecは、他の2つのテストでは受信しMockExpectationErrorなかっRails.loggerたという通知をスローします。.info誰もがこれを以前に経験したことがありますか?
編集
誰かがそのshould_receiveように振る舞い、代わりmockに私がすべきだと述べ.exactly(n).timesました。以前にこれを明確にしなかったことをお詫びしますが、私はさまざまなブロックで私の期待を持っており、1つのブロックで次のブロックのためにそれを模倣するとitは思わないのですか?私がこれについて間違っているかどうか私に知らせてください。should_receiveitit