私は、Delayed::Job のカスタム ジョブ クラスに取り組んでいます。これにより、ジョブが実行され、さまざまなライフサイクル イベントを通過する様子を観察できます。この特定のケースでは、実行されるジョブの明示的な順序を維持できるように、それらがいつ完了するかに関心があります。
生産コード:
class ObservableJob
def self.new_with_listener(listener)
job = ObservableJob.new
job.add_listener(listener)
job
end
def success
notify_listeners(:on_success)
end
def add_listener(listener)
(@listeners ||= []) << listener
end
def notify_listeners(event_name, *args)
@listeners && @listeners.each do |listener|
if listener.respond_to?(event_name)
listener.public_send(event_name, self, *args)
end
end
end
end
テストコード:
describe ObservableJob do
it "provides notification on job success" do
notifier = stub{:on_success}
notifier.should_receive(:on_success)
ObservableJob.new_with_listener(notifier).success
end
end
現在、リスナー オブジェクトが正しくコールバックされるように、モックの期待値を使用しています。これはうまくいきます。ただし、暗黙のモックの期待値に依存するよりも、テストで明示的なアサーションを使用することを好む傾向があります。ここで明示的なアサーションを使用することは可能ですか?