Тестирование¶
Выполнить задания в процессе теста¶
akadze.testing выполняет ваши задачи без процесса воркера.
from akadze.testing import assert_enqueued, drain
async def test_signup_sends_welcome(app, client):
await client.post("/signup", json={"email": "ada@example.com"})
await assert_enqueued(app, "mail.welcome", email="ada@example.com")
await drain(app)
drain(app)выполняет все задания, готовые сейчас, так же, как воркер. Задания, которые поставил запуск и которые готовы, тоже выполняются. БросаетAkadzeError, если задача готового задания не зарегистрирована вapp. Очереди на паузе пропускаются. Claim по-прежнему применяет лимиты, поэтому задание, придержанноеmax_starts, заставляетdrainделать шаги, пока не пройдёт окно;drain(app, limit=...)ограничивает число шагов и бросаетAkadzeError, если после них остались готовые задания.assert_enqueued(app, name, **arguments)проверяет, что задание этой задачи вqueuedилиrunningимеет такие аргументы (сравнение в JSON-форме).
Тестовая база¶
Тестам нужен настоящий PostgreSQL. Собственные тесты akadze читают AKADZE_DATABASE_URL и удаляют схему akadze в этой базе, поэтому отказываются работать с базой, имя которой не akadze и не оканчивается на _test. Используйте то же правило у себя: отдельная база, миграция один раз на сессию через await migrate(url).