INTEGRITY Документация

Переход с Vitest 3 на Vitest 4

@cloudflare/vitest-pool-workers версия v0.13.0 добавляет поддержку Vitest 4. v0.12.x является последней версией с поддержкой Vitest 3.x. Она продолжит работать, если вы ещё не готовы к переходу.

В версии 0.13.0 интеграция переработана на основе модели плагина Vite. Это изменение нарушает совместимость API конфигурации, однако устраняет ряд проблем, которые невозможно было решить при прежней архитектуре:

В этом руководстве описана миграция существующего проекта с v0.12.x на v0.13.x.

Обновите зависимости

Установите Vitest 4 и последнюю версию @cloudflare/vitest-pool-workers:

npm i -D vitest@^4.1.0 @cloudflare/vitest-pool-workers

@cloudflare/vitest-pool-workers также требует @vitest/runner и @vitest/snapshot по адресу ^4.1.0. Оба поставляются как зависимости vitest, поэтому установка vitest@^4.1.0 удовлетворяет им.

Обновите конфигурацию с помощью codemod

Кодмод обновляет ваш vitest.config.ts на новый API плагина автоматически. После установки пакета выполните:

npx jscodeshift -t node_modules/@cloudflare/vitest-pool-workers/dist/codemods/vitest-v3-to-v4.mjs vitest.config.ts

Чтобы запустить codemod без предварительной установки пакета, укажите путь к опубликованной версии:

npx jscodeshift -t https://unpkg.com/@cloudflare/vitest-pool-workers/dist/codemods/vitest-v3-to-v4.mjs --parser=ts vitest.config.ts

Просмотрите изменения конфигурации

defineWorkersProject и defineWorkersConfig от @cloudflare/vitest-pool-workers/config были удалены. Их заменяет cloudflareTest() плагин Vite, экспортируемый из @cloudflare/vitest-pool-workers, с параметрами, ранее вложенными в test.poolOptions.workers передаётся напрямую в cloudflareTest().

Кодмод переносит конфигурации, использующие defineWorkersProject. Если в вашей конфигурации используется defineWorkersConfig, либо вызовы defineWorkersProject с функцией вместо объекта, codemod не сможет преобразовать его. Внесите изменение вручную, используя следующий пример.

До:

vitest.config.ts
import { defineWorkersProject } from "@cloudflare/vitest-pool-workers/config";

export default defineWorkersProject({
	test: {
		poolOptions: {
			workers: {
				wrangler: { configPath: "./wrangler.jsonc" },
			},
		},
	},
});

После:

vitest.config.ts
import { cloudflareTest } from "@cloudflare/vitest-pool-workers";
import { defineConfig } from "vitest/config";

export default defineConfig({
	plugins: [
		cloudflareTest({
			wrangler: { configPath: "./wrangler.jsonc" },
		}),
	],
});

Удалить isolatedStorage и singleWorker

isolatedStorage и singleWorker параметры были удалены. Изоляция хранилища теперь выполняется для каждого тестового файла, что соответствует собственной модели изоляции Vitest. Кодмод копирует ваши существующие test.poolOptions.workers параметры в cloudflareTest(), поэтому если вы ранее установили любой из этих параметров, удалите его из cloudflareTest() вызов. Чтобы вместо этого тестовые файлы использовали общее хранилище, передайте --max-workers=1 --no-isolate флаги в команду Vitest в вашем package.json.

Обновите файлы тестов

В ваши тестовые файлы необходимо внести следующие изменения вручную.

Обновите устаревшие cloudflare:test импорты

env и SELF экспортируется из cloudflare:test считаются устаревшими в пользу cloudflare:workers. Замените import { env, SELF } from "cloudflare:test" с import { env, exports } from "cloudflare:workers". exports.default.fetch() ведёт себя так же, как SELF.fetch(), за исключением того, что он не предоставляет доступ к Assets. Для тестирования Assets используйте env.ASSETS привязку или напишите интеграционный тест с использованием startDevWorker(). Устаревшие экспортируемые объекты по-прежнему работают, поэтому это изменение желательно, но не обязательно.

- import { env, SELF } from "cloudflare:test";
+ import { env, exports } from "cloudflare:workers";

  it("dispatches fetch event", async () => {
-   const response = await SELF.fetch("https://example.com");
+   const response = await exports.default.fetch("https://example.com");
  });

Замена fetchMock

import { fetchMock } from "cloudflare:test" импорт был удалён. Мок globalThis.fetch напрямую или используйте библиотеки экосистемы, такие как MSW. См. пример мокирования запроса для полного примера.

Перенос тестовых файлов с помощью агента для написания кода

Чтобы автоматически обрабатывать изменения тестового файла, передайте следующий промпт ИИ-агенту для написания кода:

Промпт для вашего агента по написанию кода
Migrate my @cloudflare/vitest-pool-workers tests from v0.12.x to v0.13.x (Vitest 4).

1. Run the codemod to update vitest.config.ts: `npx jscodeshift -t https://unpkg.com/@cloudflare/vitest-pool-workers/dist/codemods/vitest-v3-to-v4.mjs --parser=ts vitest.config.ts`
2. Replace all `import { env, SELF } from "cloudflare:test"` with `import { env, exports } from "cloudflare:workers"`. Replace uses of `SELF.fetch()` with `exports.default.fetch()`.
3. Remove all uses of `fetchMock` imported from `cloudflare:test`. Replace with direct mocks on `globalThis.fetch`, or with MSW if the project already uses it.
4. Remove the `isolatedStorage` and `singleWorker` options from the `cloudflareTest()` configuration in vitest.config.ts (the codemod copies them over from the old config). If tests relied on shared storage across files, add `--max-workers=1 --no-isolate` to the Vitest command in package.json.
5. Update any test files affected by upstream Vitest 4 breaking changes. Refer to the migration guide at https://vitest.dev/guide/migration#vitest-4 for the full list of changes.

Изменения апстрима Vitest 4

О критических изменениях в самом Vitest 4, которые могут повлиять на ваши тесты, см. в Руководство по переходу на Vitest 4. Если возникли проблемы, откройте обсуждение в репозиторий workers-sdk на GitHub.