INTEGRITY Dokumentace

Nakonfigurujte testovací harness

createTestHarness() spouští jeden nebo více Workerů na jediném lokálním serveru. Každý Worker může pocházet z projektu Wrangler nebo z projektu Vite, který používá Cloudflare Vite plugin.

Nakonfigurujte projekty Workerů

Nasměrujte každou položku v workers pole do konfiguračního souboru Wrangleru pro projekt:

const server = createTestHarness({
	workers: [{ configPath: "./wrangler.jsonc" }],
});
const server = createTestHarness({
	workers: [{ configPath: "./wrangler.jsonc" }],
});

U Workers vytvořených pomocí Cloudflare Vite plugin, spusťte vite build nejprve, aby testy použily výstup produkčního sestavení:

npx vite build

Vygenerovaná konfigurace Wrangleru funguje stejně jako jakákoli jiná configPath. Každý Worker je nakonfigurován samostatně, takže jeden testovací rámec dokáže spustit oba typy projektů:

const server = createTestHarness({
	workers: [
		// Wrangler project
		{ configPath: "./workers/api/wrangler.jsonc" },
		// Vite project (built output from the Cloudflare Vite plugin)
		{ configPath: "./dist/web_worker/wrangler.json" },
	],
});
const server = createTestHarness({
	workers: [
		// Wrangler project
		{ configPath: "./workers/api/wrangler.jsonc" },
		// Vite project (built output from the Cloudflare Vite plugin)
		{ configPath: "./dist/web_worker/wrangler.json" },
	],
});

Vyberte prostředí Wrangler

Ve výchozím nastavení testovací framework načte nejvyšší úroveň konfigurace Wrangler. Nastavte env pokud chcete z konfigurace načíst konkrétní prostředí.

const server = createTestHarness({
	workers: [{ configPath: "./wrangler.jsonc", env: "test" }],
});
const server = createTestHarness({
	workers: [{ configPath: "./wrangler.jsonc", env: "test" }],
});

Přepsání proměnných a secrets

Můžete přepsat vars a secrets pro každého Workera v harnessu, pokud se chcete vyhnout vytváření samostatného prostředí Wrangler pro testování.

const server = createTestHarness({
	workers: [
		{
			configPath: "./wrangler.jsonc",
			vars: { API_HOST: "http://identity.example.com" },
			secrets: { API_TOKEN: "test-token" },
		},
	],
});
const server = createTestHarness({
	workers: [
		{
			configPath: "./wrangler.jsonc",
			vars: { API_HOST: "http://identity.example.com" },
			secrets: { API_TOKEN: "test-token" },
		},
	],
});

Nakonfigurujte harness po nastavení

Pokud část konfigurace Workeru závisí na nastavení testu, můžete zavolat createTestHarness() bez možností a nakonfigurujte testovací rámec pomocí server.update() před spuštěním serveru.

const server = createTestHarness();
let upstream;

beforeAll(async () => {
	upstream = await startLocalApi();

	await server.update({
		workers: [
			{
				configPath: "./wrangler.jsonc",
				vars: { API_HOST: upstream.url },
			},
		],
	});

	await server.listen();
});

afterAll(async () => {
	await server.close();
	await upstream.close();
});
const server = createTestHarness();
let upstream: { url: string; close(): Promise<void> };

beforeAll(async () => {
	upstream = await startLocalApi();

	await server.update({
		workers: [
			{
				configPath: "./wrangler.jsonc",
				vars: { API_HOST: upstream.url },
			},
		],
	});

	await server.listen();
});

afterAll(async () => {
	await server.close();
	await upstream.close();
});

Resetujte harness mezi jednotlivými testy

Při opakovaném použití serveru napříč testy zavolejte server.reset() po každém testu. Znovu vytvoří lokální úložiště a obnoví Workers na možnosti použité při spuštění aktuální relace.

const server = createTestHarness({
	workers: [{ configPath: "./wrangler.jsonc" }],
});

afterEach(async () => {
	await server.reset();
});
const server = createTestHarness({
	workers: [{ configPath: "./wrangler.jsonc" }],
});

afterEach(async () => {
	await server.reset();
});

Po resetování znovu proveďte veškeré potřebné migrace schématu a znovu vložte počáteční data. Příklady najdete v Připravte stav testu.

server.debug() vypíše časovou osu serveru a zachycené protokoly runtime Workers. Zavolejte ji, když test vyvolá výjimku nebo selže a potřebujete více informací k ladění.

Následující příklad používá cleanup hook z Vitest:

const server = createTestHarness({
	workers: [{ configPath: "./wrangler.jsonc" }],
});

afterEach(({ task }) => {
	if (task.result?.state === "fail") {
		server.debug();
	}
});
const server = createTestHarness({
	workers: [{ configPath: "./wrangler.jsonc" }],
});

afterEach(({ task }) => {
	if (task.result?.state === "fail") {
		server.debug();
	}
});

Zadejte typy pro handlery Workeru

server.getWorker() přijímá typy pro prostředí Workeru a exporty modulů. Tyto typy můžete definovat ručně. Pokud je ale chcete udržet v souladu s vaším Workerem, můžete typ env vygenerovat z konfigurace Wrangleru a exporty odvodit z jeho zdrojového modulu.

Každému Workeru přiřaďte odlišné rozhraní prostředí, aby bylo možné vygenerované deklarace používat společně:

npx wrangler types ./workers/api/worker-configuration.d.ts --config ./workers/api/wrangler.jsonc --env-interface ApiEnv

Tento příkaz zopakujte pro každý Worker a vygenerované soubory zahrňte do konfigurace TypeScriptu pro vaše testy:

{
	"include": ["./workers/*/worker-configuration.d.ts", "./tests/**/*.ts"]
}

Předejte vygenerované rozhraní prostředí do server.getWorker(). Použijte typeof import() pro odvození exportů Workeru z jeho zdrojového modulu:

const apiWorker = server.getWorker("api-worker");
const apiWorker = server.getWorker<
	ApiEnv,
	typeof import("../workers/api/index")
>("api-worker");

V tomto příkladu ApiEnv pochází z worker-configuration.d.ts. Typ modulu zahrnuje výchozí export a jeho RPC metody. Znovu spusťte wrangler types při změně konfigurace Workeru.