Zaawansowane API
WARNING
Ten przewodnik przedstawia zaawansowane API do uruchamiania testów przy użyciu skryptu Node.js. Jeśli chcesz po prostu uruchomić testy, prawdopodobnie nie potrzebujesz tego. Jest ono używane głównie przez autorów bibliotek.
Możesz zaimportować dowolną metodę z modułu vitest/node.
startVitest
function startVitest(
mode: VitestRunMode,
cliFilters: string[] = [],
options: CliOptions = {},
viteOverrides?: ViteUserConfig,
vitestOptions?: VitestOptions
): Promise<Vitest>;Możesz rozpocząć uruchamianie testów Vitest za pomocą jego API Node.js:
import { startVitest } from 'vitest/node';
const vitest = await startVitest('test');
await vitest.close();Funkcja startVitest zwraca instancję Vitest, jeśli testy mogą być uruchomione.
Jeśli tryb obserwacji nie jest włączony, Vitest automatycznie wywoła metodę close.
Jeśli tryb obserwacji jest włączony, a terminal obsługuje TTY, Vitest zarejestruje skróty klawiszowe konsoli.
Możesz przekazać listę filtrów jako drugi argument. Vitest uruchomi tylko testy, które zawierają co najmniej jeden z przekazanych ciągów znaków w ścieżce pliku.
Dodatkowo możesz użyć trzeciego argumentu, aby przekazać argumenty CLI, które nadpiszą dowolne opcje konfiguracji testów. Alternatywnie możesz przekazać pełną konfigurację Vite jako czwarty argument, która ma pierwszeństwo przed wszelkimi innymi opcjami zdefiniowanymi przez użytkownika.
Po uruchomieniu testów możesz uzyskać wyniki z API state.getTestModules:
import type { TestModule } from 'vitest/node';
const vitest = await startVitest('test');
console.log(vitest.state.getTestModules()); // [TestModule]TIP
Przewodnik "Uruchamianie testów" zawiera przykład użycia.
createVitest
function createVitest(
mode: VitestRunMode,
options: CliOptions,
viteOverrides: ViteUserConfig = {},
vitestOptions: VitestOptions = {}
): Promise<Vitest>;Możesz utworzyć instancję Vitest, używając funkcji createVitest. Zwraca ona tę samą instancję Vitest co startVitest, ale nie uruchamia testów i nie waliduje zainstalowanych pakietów.
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test', {
watch: false,
});TIP
Przewodnik "Uruchamianie testów" zawiera przykład użycia.
resolveConfig
function resolveConfig(
options: UserConfig = {},
viteOverrides: ViteUserConfig = {}
): Promise<{
vitestConfig: ResolvedConfig;
viteConfig: ResolvedViteConfig;
}>;Ta metoda przetwarza konfigurację z niestandardowymi parametrami. Jeśli nie podano żadnych parametrów, root będzie równy process.cwd().
import { resolveConfig } from 'vitest/node';
// vitestConfig ma tylko przetworzone właściwości "test"
const { vitestConfig, viteConfig } = await resolveConfig({
mode: 'custom',
configFile: false,
resolve: {
conditions: ['custom'],
},
test: {
setupFiles: ['/my-setup-file.js'],
pool: 'threads',
},
});INFO
Ze względu na sposób działania createServer w Vite, Vitest musi przetworzyć konfigurację podczas wywołania haka configResolve wtyczki. Dlatego ta metoda nie jest faktycznie używana wewnętrznie i jest dostępna wyłącznie jako publiczne API.
Jeśli przekazujesz konfigurację do API startVitest lub createVitest, Vitest ponownie przetworzy konfigurację.
WARNING
resolveConfig nie przetwarza projects. Aby przetworzyć konfiguracje projektów, Vitest potrzebuje działającego serwera Vite.
Należy również pamiętać, że viteConfig.test nie zostanie w pełni przetworzony. Jeśli potrzebujesz konfiguracji Vitest, użyj zamiast tego vitestConfig.
parseCLI
function parseCLI(
argv: string | string[],
config: CliParseOptions = {}
): {
filter: string[];
options: CliOptions;
};Możesz użyć tej metody do analizy argumentów CLI. Akceptuje ciąg znaków (gdzie argumenty są oddzielone pojedynczą spacją) lub tablicę ciągów znaków argumentów CLI w tym samym formacie, którego używa Vitest CLI. Zwraca filtr i options, które możesz później przekazać do metod createVitest lub startVitest.
import { parseCLI } from 'vitest/node';
const result = parseCLI('vitest ./files.ts --coverage --browser=chrome');
result.options;
// {
// coverage: { enabled: true },
// browser: { name: 'chrome', enabled: true }
// }
result.filter;
// ['./files.ts']