2

私は、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

現在、リスナー オブジェクトが正しくコールバックされるように、モックの期待値を使用しています。これはうまくいきます。ただし、暗黙のモックの期待値に依存するよりも、テストで明示的なアサーションを使用することを好む傾向があります。ここで明示的なアサーションを使用することは可能ですか?

4

1 に答える 1