Oban Job Testing in Elixir

Hello everyone!

I am here with a new query in my mind.

Is there any assert in test cases when Oban job is completed like there are many helper functions to check the Oban Job testing. Similarly, I want to check that the job is completed OR in progress or something else.

I checked the Oban Testing Documentation but nothing was found similar.

Any guess about it?

I’m not sure I understand. When you’re in a test, Oban is not running in the background. You can use Oban.drain_queue to synchronously run jobs that are queued up, but there isn’t a lot of point in asserting on what jobs are doing because well, they aren’t doing anything on their own during tests.

I think the point of the Oban test helpers is to test the jobs from the “outside”, that is, make assertions on the observable effects. So you can:

  • Verify that the jobs were enqueued with assert_enqueued,
  • Verify that the jobs were not enqueued with refute_enqueued,
  • Inspect all enqueued jobs with all_enqueued,
  • Run a job synchronously and verify the result of the job with perform_job,
  • Run jobs and verify how many succeeded or failed with drain_queue.

You could in theory get notified about the job status by plugging into Telemetry, but I think it would be better to restructure the way you make assertions.

Can please share more details about the kind of behaviour you are trying to test? Maybe there’s a different way to do it?