だから私の理解に基づいて、あなたがするとき私は信じています
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
.perform
Resqueタスククラスの方法では、私はを実行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_receive
it
it