← Cloudflare Workers / workers / testing / vitest-integration
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().
-
main: string nepovinné- Vstupní bod Workeru spouštěného ve stejném izolátu/kontextu jako testy. Tato volba je nutná, chcete-li používat Durable Objects bez explicitního
scriptNamepokud jsou třídy definované ve stejném Workeru. Tento soubor prochází transformacemi Vite a může být v TypeScriptu. Mějte na paměti, žeimport module from "<path-to-main>"uvnitř testů poskytuje přesně stejnémoduleinstance, jak se interně používá proexportsa bindingy Durable Object. Pokudwrangler.configPathje definována a tato možnost nikoli, načte se zmainpole v daném konfiguračním souboru.
- Vstupní bod Workeru spouštěného ve stejném izolátu/kontextu jako testy. Tato volba je nutná, chcete-li používat Durable Objects bez explicitního
-
miniflare:SourcelessWorkerOptions & { workers?: WorkerOptions\[]; }volitelné-
Toho využijte k předání konfiguračních informací, které se obvykle ukládají do Konfigurační soubor Wrangler, jako je vazby, data kompatibility, a compatibility flags.
WorkerOptionsrozhraní je definováno zde ↗. Použijtemainmožnost výše ke konfiguraci vstupního bodu, místo možnosti Miniflarescript,scriptPath, nebomodulesmožnosti.- Pokud žádný
compatibility_dateje zadáno, test použije nejnovější lokálně dostupné datum.
- Pokud žádný
-
Pokud váš projekt využívá více Workers, můžete nakonfigurovat pomocné Workers, které běží ve stejném
workerdproces jako vaše testy a lze se k němu připojit. Auxiliary Workers se konfigurují pomocíworkerspole obsahující běžné MiniflareWorkerOptions↗ objekty. Na rozdíl odmainWorker, pomocné Workery:- Nemohou mít vstupní body v TypeScriptu. Pomocné Workers musíte nejprve zkompilovat do JavaScriptu. Můžete použít
wrangler deploy --dry-run --outdir distpříkaz k tomuto účelu. - Použijte standardní sémantiku rozlišování modulů Workers. Podívejte se na Izolace a souběžnost stránku, kde najdete další informace.
- Nelze přistupovat k
cloudflare:testmodul. - Nevyžadujte konkrétní data kompatibility ani flagy.
- Lze zapsat pomocí Syntaxe Service Worker.
- Nejsou ovlivněny globálními mocky definovanými ve vašich testech.
- Nemohou mít vstupní body v TypeScriptu. Pomocné Workers musíte nejprve zkompilovat do JavaScriptu. Můžete použít
-
-
wrangler:{ configPath?: string; environment?: string; }volitelné-
Cesta k Konfigurační soubor Wrangler k načtení
main, nastavení kompatibility a vazby z. Tyto možnosti se sloučí sminiflaremožnost výše, sminiflarehodnoty mají přednost. Pokud například vaše konfigurace Wrangler definovala service binding s názvemSERVICEna Worker s názvemservice, ale zahrnuli jsteserviceBindings: { SERVICE(request) { return new Response("body"); } }vminiflaremožnost, všechny požadavky naSERVICEv testech by vrátilobody. Všimněte siconfigPathpřijímá obojí.tomla.jsonsoubory. -
Možnost prostředí lze použít k zadání Prostředí Wrangleru odkud se načtou bindings a proměnné.
-
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"
>;