Cloudflare представил инструменты для изолированного тестирования Workflows

Cloudflare представил инструменты для изолированного тестирования Workflows, устранив проблему черного ящика при отладке многошаговых приложений.

Cover Image for Cloudflare представил инструменты для изолированного тестирования Workflows

По сообщению Cloudflare, разработчик платформы представил новые API для тестирования Workflows — механизма устойчивого выполнения для многошаговых приложений. Ранее тестирование таких процессов было похоже на работу с черным ящиком: можно было проверить только финальный статус выполнения, но не промежуточные шаги.

Проблемы прежнего подхода

До выхода нового релиза тестирование Workflows создавало серьезные ограничения для разработчиков. Основные проблемы включали:

  • Отсутствие видимости промежуточных шагов выполнения
  • Необходимость отключать изолированное хранилище при добавлении Workflows в проект
  • Возможность утечек состояния между тестами
  • Сложность отладки сложных процессов оркестрации

Эта ситуация вынуждала разработчиков делать сложный выбор: либо отказаться от изолированного тестирования всего проекта, либо вовсе не тестировать Workflows.

Новые возможности тестирования

В версии 0.9.0 и выше @cloudflare/vitest-pool-workers появились две ключевые функции:

  • introspectWorkflowInstance — для модульных тестов с известными идентификаторами экземпляров
  • introspectWorkflow — для интеграционных тестов с динамически генерируемыми идентификаторами

Новые API позволяют выполнять тестирование локально и офлайн с помощью vitest-pool-workers, что обеспечивает быстрые и надежные запуски тестов без зависимости от сетевого подключения.

Наконец-то разработчики получают инструменты для полноценного тестирования сложных рабочих процессов. До этого отладка многошаговых приложений напоминала гадание на кофейной гуще — можно было только догадываться, на каком именно этапе что-то пошло не так. Теперь же появилась возможность точечно мокать каждый шаг и проверять промежуточные состояния, что кардинально меняет подход к разработке надежных распределенных систем.

Пример использования: модерация блога

Рассмотрим практический пример Workflow для модерации комментариев в блоге. Процесс включает:

  1. Сканирование контента с помощью Workers AI
  2. Ожидание решения модератора
  3. Публикацию комментария через внешний API

Теперь можно протестировать каждый этап:

it("should mock a an ambiguous score, approve comment and complete", async () => {
// CONFIG
await using instance = await introspectWorkflowInstance(
env.MODERATOR,
"my-workflow-instance-id-123"
);
await instance.modify(async (m) => {
await m.mockStepResult({ name: "AI content scan" }, { violationScore: 50 });
await m.mockEvent({
type: "moderation-approval",
payload: { action: "approved" },
});
await m.mockStepResult({ name: "publish comment" }, { status: "published" });
});

await env.MODERATOR.create({ id: "my-workflow-instance-id-123" });

// ASSERTIONS
expect(await instance.waitForStepResult({ name: "AI content scan" })).toEqual(
{ violationScore: 50 }
);
expect(
await instance.waitForStepResult({ name: "publish comment" })
).toEqual({ status: "published" });

await expect(instance.waitForStatus("complete")).resolves.not.toThrow();
});

Техническая реализация

Решение построено на интеграции Vitest с механизмом Workflows Engine. При локальном запуске через wrangler dev каждый экземпляр Workflow поддерживается собственным SQLite Durable Object (Engine DO), который отвечает за выполнение шагов, сохранение состояния и управление жизненным циклом экземпляра.

Ключевым элементом новой архитектуры стало использование синтаксиса явного управления ресурсами с конструкцией await using, которая гарантирует изоляцию хранилища между тестами и корректное освобождение ресурсов.

Новые инструменты тестирования доступны через модуль cloudflare:test и поддерживают мокирование результатов шагов, событий и отключение задержек, что делает тестирование предсказуемым и воспроизводимым.

Подробная документация доступна на Workers Cloudflare Docs.