# Testing Use `Oban.Pro.Testing` — a drop-in replacement for `Oban.Testing` with Pro helpers. ## Configuration ```elixir # config/test.exs config :my_app, Oban, testing: :manual ``` ## Helpers **Unit testing** — execute jobs without the database: - `perform_job/3` — execute a single job - `perform_callback/4` — execute batch callbacks - `perform_chunk/3` — execute chunk workers **Integration testing** — insert and execute jobs: - `drain_jobs/1` — execute jobs across queues - `run_workflow/2` — insert and execute a workflow - `run_batch/2` — insert and execute a batch - `run_chunk/2` — insert and execute chunked jobs **Always use `drain_jobs/1` instead of `Oban.drain_queue/2`:** - Drains all queues with `queue: :all` - Handles workflows, batches, and chains correctly - Supports recursive draining - Returns completion counts ```elixir defmodule MyApp.WorkerTest do use MyApp.DataCase, async: false use Oban.Pro.Testing, repo: MyApp.Repo test "processes job" do assert :ok == perform_job(SomeWorker, %{user_id: 123}) end test "drains enqueued jobs" do MyApp.enqueue_work() assert %{completed: 3} = drain_jobs(queue: :all) end end ```