INTEGRITY Dokumentace

Konfigurace

Integrace Workers Vitest poskytuje doplňkovou konfiguraci nad rámec obvyklých možností Vitest pomocí cloudflareTest() Vite plugin.

Příklad konfigurace by mohl vypadat takto:

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

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

API

Následující API jsou exportována z @cloudflare/vitest-plugin balíček.

cloudflareTest(options)

Plugin pro Vite, který nastaví Vitest tak, aby využíval integraci s Workers se správným nastavením rozlišování modulů, a poskytuje kontrolu typů pro CloudflareTestOptions. Přidejte to do plugins pole v konfiguraci Vitest vedle defineConfig() z Vitestu.

Také přijímá volitelně-async funkce vracející options.

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

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

buildPagesASSETSBinding(assetsPath)

Exportováno z @cloudflare/vitest-plugin/config. Vytvoří vazbu Pages ASSETS, která obsluhuje soubory uvnitř assetsPath. To je nutné, pokud používáte createPagesEventContext() pro otestování vašeho Pages Functions. Přečtěte si Recept Pages pro úplný příklad.

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)

Exportováno z @cloudflare/vitest-plugin/config. Čte všechny Migrace D1 uloženo na migrationsPath a vrátí je seřazené podle čísla migrace. Obsah každé migrace bude rozdělen do pole jednotlivých SQL dotazů. Zavolejte applyD1Migrations() funkci uvnitř testu nebo inicializační soubor pro použití migrací. Podívejte se na Recept D1 pro příklad projektu využívajícího migrace.

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

Možnosti předávané přímo do cloudflareTest().

Dynamická konfigurace pomocí inject

Můžete předat async funkci k cloudflareTest() která přijímá inject funkci. To vám umožní definovat miniflare konfiguraci na základě hodnot vložených z globalSetup scripts. Použijte to v případě, že máte v konfiguraci hodnotu, která se generuje dynamicky a je známá až za běhu (runtime) testů. Globální setup skript může například spustit upstream server na náhodném portu. Tento port by pak mohl být provide()d a poté inject(), tedy vložen do konfigurace pro vazbu na externí službu nebo Hyperdrive. Přečtěte si recept Hyperdrive pro příklad projektu využívajícího tento přístup provide/inject.

Ilustrační příklad

// 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

Sourceless WorkerOptions typ bez script, scriptPath, nebo modules vlastnosti. Viz Miniflare WorkerOptions typu, kde najdete více podrobností.

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