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

Конфигурация

Интеграция Workers Vitest предоставляет дополнительную конфигурацию поверх обычных опций Vitest с помощью cloudflareTest() плагин Vite.

Пример конфигурации:

import { cloudflareTest } from "@cloudflare/vitest-plugin";
import { defineConfig } from "vitest/config";

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

API

Следующие API экспортируются из @cloudflare/vitest-plugin пакет.

cloudflareTest(options)

Плагин Vite, который настраивает Vitest на использование интеграции с Workers с корректными настройками разрешения модулей, а также обеспечивает проверку типов для CloudflareTestOptions. Добавьте это в plugins массив в конфигурации Vitest рядом с defineConfig() из Vitest.

Также принимает необязательно-async функция, возвращающая options.

import { cloudflareTest } from "@cloudflare/vitest-plugin";
import { defineConfig } from "vitest/config";

export default defineConfig({
	plugins: [
		cloudflareTest({
			// Refer to CloudflareTestOptions...
		}),
	],
});

buildPagesASSETSBinding(assetsPath)

Экспортировано из @cloudflare/vitest-plugin/config. Создаёт привязку Pages ASSETS, которая отдаёт файлы из assetsPath. Это необходимо, если вы используете createPagesEventContext() для тестирования Pages Functions. См. Рецепт для Pages для исчерпывающего примера.

import path from "node:path";
import { buildPagesASSETSBinding, cloudflareTest } from "@cloudflare/vitest-plugin";
import { defineConfig } from "vitest/config";

export default defineConfig({
	plugins: [
		cloudflareTest(async () => {
			const assetsPath = path.join(__dirname, "public");

			return {
				miniflare: {
					serviceBindings: {
						ASSETS: await buildPagesASSETSBinding(assetsPath),
					},
				},
			};
		}),
	],
});

readD1Migrations(migrationsPath)

Экспортировано из @cloudflare/vitest-plugin/config. Считывает все Миграции D1 хранится в migrationsPath и возвращает их, упорядоченными по номеру миграции. Содержимое каждой миграции разбивается на массив отдельных SQL-запросов. Вызовите applyD1Migrations() функцию внутри теста или файл настройки чтобы применить миграции. См. Рецепт D1 пример проекта с использованием миграций.

import path from "node:path";
import { cloudflareTest, readD1Migrations } from "@cloudflare/vitest-plugin";
import { defineConfig } from "vitest/config";

export default defineConfig({
	plugins: [
		cloudflareTest(async () => {
			const migrationsPath = path.join(__dirname, "migrations");
			const migrations = await readD1Migrations(migrationsPath);

			return {
				miniflare: {
					// Add a test-only binding for migrations, so we can apply them in a setup file
					bindings: { TEST_MIGRATIONS: migrations },
				},
			};
		}),
	],
	test: {
		setupFiles: ["./test/apply-migrations.ts"],
	},
});

CloudflareTestOptions

Параметры, передаваемые напрямую в cloudflareTest().

Динамическая конфигурация с помощью inject

Можно передать async функцию, чтобы cloudflareTest() который получает inject функция. Это позволяет определить miniflare конфигурацию на основе значений, переданных из globalSetup scripts. Используйте это, если в конфигурации есть значение, которое генерируется динамически и становится известно только во время выполнения тестов. Например, глобальный скрипт настройки может запускать вышестоящий сервер на случайном порту. Этот порт можно provide()d, а затем inject(), то есть внедрён в конфигурацию для привязки к внешней службе или Hyperdrive. См. Рецепт Hyperdrive пример проекта, использующего подход provide/inject.

Наглядный пример

// env.d.ts
declare module "vitest" {
	interface ProvidedContext {
		port: number;
	}
}

// global-setup.ts
import type { GlobalSetupContext } from "vitest/node";
export default function ({ provide }: GlobalSetupContext) {
	// Runs inside Node.js, could start server here...
	provide("port", 1337);
	return () => {
		/* ...then teardown here */
	};
}

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

export default defineConfig({
	plugins: [
		cloudflareTest(({ inject }) => ({
			miniflare: {
				hyperdrives: {
					DATABASE: `postgres://user:[email protected]:${inject("port")}/db`,
				},
			},
		})),
	],
	test: {
		globalSetup: ["./global-setup.ts"],
	},
});

SourcelessWorkerOptions

Без исходного кода WorkerOptions тип без script, scriptPath, или modules свойства. См. раздел Miniflare WorkerOptions тип для получения дополнительных сведений.

type SourcelessWorkerOptions = Omit<
	WorkerOptions,
	"script" | "scriptPath" | "modules" | "modulesRoot"
>;