Obszar roboczy
Vitest zapewnia wbudowane wsparcie dla monorepozytoriów poprzez plik konfiguracyjny obszaru roboczego. Możesz utworzyć obszar roboczy, aby zdefiniować konfiguracje dla poszczególnych projektów w repozytorium.
Definiowanie obszaru roboczego
Plik vitest.workspace
lub vitest.projects
powinien znajdować się w katalogu głównym obszaru roboczego (w tym samym folderze co plik konfiguracyjny Vitest, jeśli istnieje). Vitest obsługuje rozszerzenia ts
/js
/json
dla tego pliku.
Plik konfiguracyjny obszaru roboczego powinien eksportować domyślnie listę plików lub wzorców glob, które wskazują na twoje projekty. Na przykład, jeśli masz folder z projektami o nazwie packages
, możesz zdefiniować obszar roboczy za pomocą następującego pliku konfiguracyjnego:
export default ['packages/*'];
Vitest potraktuje każdy folder w packages
jako oddzielny projekt, nawet jeśli nie zawiera on pliku konfiguracyjnego Vitest.
WARNING
Vitest nie uzna konfiguracji na poziomie głównym za projekt obszaru roboczego (więc nie uruchomi testów określonych w include
), chyba że zostanie to wyraźnie określone w konfiguracji obszaru roboczego.
Możesz również odwoływać się do projektów, wskazując na ich pliki konfiguracyjne:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Ten wzorzec uwzględni tylko projekty, które posiadają plik vitest.config
z sufiksem e2e
lub unit
przed rozszerzeniem pliku.
WARNING
Jeśli odwołujesz się do plików konfiguracyjnych za pomocą wzorca glob, upewnij się, że nazwa pliku konfiguracyjnego zaczyna się od vite.config
lub vitest.config
. W przeciwnym razie Vitest go zignoruje.
Możesz również definiować projekty, używając konfiguracji bezpośrednio w pliku obszaru roboczego (inline config). Plik obszaru roboczego obsługuje łączenie obu składni.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace zapewnia wygodne podpowiedzi typów (DX)
export default defineWorkspace([
'packages/*',
{
// Użyj "extends", aby połączyć dwie konfiguracje.
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// zaleca się zdefiniowanie nazwy podczas korzystania z konfiguracji inline
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
name: 'node',
environment: 'node',
},
},
]);
WARNING
Wszystkie projekty muszą mieć unikalne nazwy. W przeciwnym razie Vitest zgłosi błąd. Jeśli nie podasz nazwy w konfiguracji inline, Vitest automatycznie przypisze numer. Jeśli nie podasz nazwy w konfiguracji projektu zdefiniowanej za pomocą składni glob, Vitest domyślnie użyje nazwy katalogu.
Jeśli nie korzystasz z konfiguracji inline, możesz po prostu utworzyć mały plik JSON w katalogu głównym:
["packages/*"]
Projekty w obszarze roboczym nie obsługują wszystkich opcji konfiguracyjnych. Aby zapewnić lepszą kontrolę typów, użyj metody defineProject
zamiast defineConfig
w plikach konfiguracyjnych projektu:
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" nie jest obsługiwany w konfiguracji projektu,
// więc pokaże błąd
reporters: ['json'],
},
});
Konfiguracja
Żadna z opcji konfiguracyjnych z pliku konfiguracyjnego na poziomie głównym nie jest dziedziczona przez projekty w obszarze roboczym. Możesz utworzyć współdzielony plik konfiguracyjny i samodzielnie połączyć go z konfiguracją każdego projektu:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
Ponadto, niektóre opcje konfiguracyjne są niedozwolone w konfiguracji projektu. W szczególności:
coverage
: pokrycie kodu jest wykonywane dla całego obszaru roboczegoreporters
: obsługiwane są tylko reportery na poziomie głównymresolveSnapshotPath
: respektowany jest tylko resolver na poziomie głównym- wszystkie inne opcje, które nie mają wpływu na uruchamiacze testów
TIP
Wszystkie opcje konfiguracyjne, które nie są obsługiwane w konfiguracji projektu, są oznaczone symbolem * na stronie "Config".
Pokrycie kodu
Pokrycie kodu dla projektów w obszarze roboczym działa domyślnie. Jeśli masz włączoną opcję all
i używasz niestandardowych rozszerzeń plików w niektórych projektach, będziesz potrzebować wtyczki obsługującej to rozszerzenie w głównym pliku konfiguracyjnym.
Na przykład, jeśli masz pakiet, który używa plików Vue i ma własny plik konfiguracyjny, ale niektóre pliki Vue nie są importowane w testach, analiza pokrycia kodu może zakończyć się niepowodzeniem. Dzieje się tak, ponieważ Vitest próbuje przeanalizować nieużywane pliki, opierając się na konfiguracji głównej, a nie na konfiguracji projektu.