Skip to content
Vitest 1
Main Navigation PrůvodceAPIKonfiguracePokročilý
1.6.1
0.34.6

čeština

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
magyar

čeština

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
magyar

Vzhled

Sidebar Navigation

Průvodce

Proč Vitest

Začínáme

Funkce

Workspace

Rozhraní příkazového řádku

Filtrování testů

Reportéři

Pokrytí

Snímky

Mockování

Testování typů

Vitest UI

Režim prohlížeče

Testování ve zdrojovém kódu

Kontext testu

Testovací prostředí

Rozšíření matcherů/porovnávačů

Integrace do IDE

Ladění

Srovnání s jinými testovacími nástroji

Průvodce migrací

Běžné chyby

Zvýšení výkonu

API

Referenční příručka k Test API

Mock funkce

Vi

expect

expectTypeOf

assert

assertType

Konfigurace

Správa konfiguračního souboru pro Vitest

Konfigurace Vitest

Na této stránce

Průvodce migrací ​

Migrace z Vitest 0.34.6 ​

Minimální požadavky ​

Vitest 1.0 vyžaduje Vite 5.0 a Node.js 18 nebo vyšší.

Všechny dílčí balíčky @vitest/* vyžadují Vitest verzi 1.0.

Aktualizace snímků #3961 ​

Uvozovky ve snímcích již nejsou escapovány. Všechny snímky používají zpětné uvozovky (`) i v případě, že řetězec obsahuje pouze jeden řádek.

  1. Uvozovky již nejsou escapovány.
diff
expect({ foo: 'bar' }).toMatchInlineSnapshot(`
  Object {
-    \\"foo\\": \\"bar\\",
+    "foo": "bar",
  }
`)
  1. Jednořádkové snímky nyní používají zpětné uvozovky "`" místo ':
diff
- expect('some string').toMatchInlineSnapshot('"some string"')
+ expect('some string').toMatchInlineSnapshot(`"some string"`)

Došlo také ke změnám v balíčku @vitest/snapshot. Pokud jej nepoužíváte přímo, není nutné provádět žádné změny.

  • Již nemusíte rozšiřovat SnapshotClient pouze proto, abyste přepsali metodu equalityCheck: stačí ji předat jako isEqual při inicializaci instance.
  • client.setTest byl přejmenován na client.startCurrentRun.
  • client.resetCurrent byl přejmenován na client.finishCurrentRun.

Pracovní prostory jsou standardizovány #4172 ​

Odebrali jsme mnoho konfiguračních možností, abychom zjednodušili konfiguraci spouštěče podle vašich potřeb. Pokud používáte --threads nebo jiné související parametry, podívejte se na příklady migrace.

  • --threads nyní je --pool=threads.
  • --no-threads nyní je --pool=forks.
  • --single-thread nyní je --poolOptions.threads.singleThread.
  • --experimental-vm-threads nyní je --pool=vmThreads.
  • --experimental-vm-worker-memory-limit nyní je --poolOptions.vmThreads.memoryLimit.
  • --isolate nyní je --poolOptions.<pool-name>.isolate a browser.isolate.
  • test.maxThreads nyní je test.poolOptions.<pool-name>.maxThreads.
  • test.minThreads nyní je test.poolOptions.<pool-name>.minThreads.
  • test.useAtomics nyní je test.poolOptions.<pool-name>.useAtomics.
  • test.poolMatchGlobs.child_process nyní je test.poolMatchGlobs.forks.
  • test.poolMatchGlobs.experimentalVmThreads nyní je test.poolMatchGlobs.vmThreads.
diff
{
  scripts: {
-    "test": "vitest --no-threads"
     // Pro identické chování:
+    "test": "vitest --pool forks --poolOptions.forks.singleFork"
     // Nebo multi paralelní forky:
+    "test": "vitest --pool forks"

  }
}
diff
{
  scripts: {
-    "test": "vitest --experimental-vm-threads"
+    "test": "vitest --pool vmThreads"
  }
}
diff
{
  scripts: {
-    "test": "vitest --isolate false"
+    "test": "vitest --poolOptions.threads.isolate false"
  }
}
diff
{
  scripts: {
-    "test": "vitest --no-threads --isolate false"
+    "test": "vitest --pool forks --poolOptions.forks.isolate false"
  }
}

Změny v pokrytí #4265, #4442 ​

Možnost coverage.all je nyní ve výchozím nastavení povolena. To znamená, že všechny soubory projektu odpovídající vzoru coverage.include budou zpracovány, i když nebudou spuštěny.

Tvar API prahových hodnot pokrytí byl upraven a nyní podporuje specifikaci prahových hodnot pro konkrétní soubory pomocí glob vzorců:

diff
export default defineConfig({
  test: {
    coverage: {
-      perFile: true,
-      thresholdAutoUpdate: true,
-      100: true,
-      lines: 100,
-      functions: 100,
-      branches: 100,
-      statements: 100,
+      thresholds: {
+        perFile: true,
+        autoUpdate: true,
+        100: true,
+        lines: 100,
+        functions: 100,
+        branches: 100,
+        statements: 100,
+      }
    }
  }
})

Typy Mock #4400 ​

Několik typů bylo odstraněno a nahrazeno pojmenováním "Mock" ve stylu Jest.

diff
- import { EnhancedSpy, SpyInstance } from 'vitest'
+ import { MockInstance } from 'vitest'

WARNING

SpyInstance je zastaralý ve prospěch MockInstance a bude odebrán v příští hlavní verzi.

Napodobování časovačů #3925 ​

vi.useFakeTimers() již automaticky nemockuje process.nextTick. Stále je možné mockovat process.nextTick explicitním specifikováním pomocí vi.useFakeTimers({ toFake: ['nextTick'] }).

Mockování process.nextTick však není možné při použití --pool=forks. Pokud potřebujete mockování process.nextTick, použijte jinou možnost --pool.

Migrace z Jest ​

Vitest byl navržen s API, které je kompatibilní s Jest, aby byla migrace co nejjednodušší. I přes toto úsilí se můžete setkat s následujícími rozdíly:

Globální proměnné jsou ve výchozím nastavení zakázané ​

Jest má ve výchozím nastavení povoleno globální API. Vitest ne. Můžete buď povolit globální proměnné prostřednictvím nastavení konfigurace globals, nebo aktualizovat kód tak, aby místo toho používal importy z modulu vitest.

Pokud se rozhodnete ponechat globální proměnné zakázané, uvědomte si, že běžné knihovny jako testing-library nebudou automaticky spouštět DOM čištění.

Napodobování modulů ​

V Jest, při napodobování modulu, je výchozí export návratovou hodnotou argumentu factory. Ve Vitest musí argument factory vrátit objekt, který explicitně definuje každý export. Například následující jest.mock by musel být aktualizován takto:

ts
jest.mock('./some-path', () => 'hello'); 
vi.mock('./some-path', () => ({
  default: 'hello', 
})); 

Další podrobnosti naleznete v sekci API vi.mock.

Chování automatického napodobování ​

Na rozdíl od Jest, napodobené moduly v <root>/__mocks__ nejsou načteny, dokud není volána funkce vi.mock(). Pokud je potřebujete mockovat v každém testu, jako v Jest, můžete je mockovat uvnitř setupFiles.

Importování originálu napodobovaného balíčku ​

Pokud pouze částečně napodobujete balíček, je možné, že jste dříve použili funkci requireActual z Jest. Ve Vitest byste měli tato volání nahradit vi.importActual.

ts
const { cloneDeep } = jest.requireActual('lodash/cloneDeep'); 
const { cloneDeep } = await vi.importActual('lodash/cloneDeep'); 

Rozšíření napodobování na externí knihovny ​

Jest ve výchozím nastavení rozšiřuje mockování na externí knihovny. Pokud chcete, aby se mockování modulu rozšířilo i na jiné externí knihovny, které používají stejný modul, musíte explicitně uvést, které knihovny třetích stran chcete mockovat. Tím zajistíte, že se externí knihovna stane součástí vašeho zdrojového kódu. Použijte k tomu server.deps.inline.

server.deps.inline: ["lib-name"]

Přístup k návratovým hodnotám napodobované Promise ​

Jak Jest, tak Vitest ukládají výsledky všech mock volání do pole mock.results. Návratové hodnoty každého volání jsou uloženy ve vlastnosti value. Pokud však napodobujete nebo špehujete Promise (např. pomocí mockResolvedValue), v Jest bude vlastnost value obsahovat Promise, zatímco ve Vitest bude obsahovat vyřešenou hodnotu po vyřešení Promise.

ts
await expect(spy.mock.results[0].value).resolves.toBe(123); 
expect(spy.mock.results[0].value).toBe(123); 

Proměnné prostředí (Envs) ​

Stejně jako Jest, Vitest nastaví NODE_ENV na test, pokud nebyla nastavena dříve. Vitest má také ekvivalent pro JEST_WORKER_ID, který se nazývá VITEST_POOL_ID (vždy menší nebo roven maxThreads). Pokud na JEST_WORKER_ID spoléháte, nezapomeňte jej přejmenovat. Vitest také zpřístupňuje VITEST_WORKER_ID, což je jedinečné ID spuštěného workeru - toto číslo není ovlivněno maxThreads a bude se zvyšovat s každým vytvořeným workerem.

Vlastnost Replace ​

Pokud chcete upravit objekt, použijte replaceProperty API v Jest, můžete použít vi.stubEnv nebo vi.spyOn k provedení stejné akce také ve Vitest.

Done Callback ​

Od verze Vitest v0.10.0 je styl deklarování testů pomocí zpětného volání zastaralý. Můžete je přepsat tak, aby používaly funkce async/await, nebo použít Promise k napodobení stylu zpětného volání.

it('should work', (done) => {  // [!code --]
it('should work', () => new Promise(done => { // [!code ++]
  // ...
  done()
}) // [!code --]
})) // [!code ++]

Háky ​

beforeAll/beforeEach háky mohou ve Vitest vracet ukončovací funkci. Proto možná budete muset upravit deklarace háků, pokud vracejí hodnotu jinou než undefined nebo null:

ts
beforeEach(() => setActivePinia(createTestingPinia())); 
beforeEach(() => {
  setActivePinia(createTestingPinia());
}); 

V Jest se háky volají postupně. Ve výchozím nastavení Vitest spouští háky paralelně. Pokud chcete dosáhnout chování jako v Jest, aktualizujte nastavení sequence.hooks:

ts
export default defineConfig({
  test: {
    sequence: {
      hooks: 'list', 
    }, 
  },
});

Typy ​

Vitest nemá ekvivalent jmenného prostoru jest. Budete tedy muset importovat typy přímo z vitest:

ts
let fn: jest.Mock<string, [string]>; 
import type { Mock } from 'vitest'; 
let fn: Mock<[string], string>; 

Na rozdíl od Jest, Vitest používá typ Args jako první argument místo Returns. Rozdíl je patrný v diffu.

Časovače ​

Vitest nepodporuje starší časovače Jest.

Časový limit (Timeout) ​

Pokud jste používali jest.setTimeout, budete muset migrovat na vi.setConfig:

ts
jest.setTimeout(5_000); 
vi.setConfig({ testTimeout: 5_000 }); 

Vue Snímky ​

Ačkoli se nejedná o funkci specifickou pro Jest, pokud jste dříve používali Jest s přednastavením vue-cli, budete muset nainstalovat balíček jest-serializer-vue a použít jej v souboru setupFiles:

vite.config.js

js
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    setupFiles: ['./tests/unit/setup.js'],
  },
});

tests/unit/setup.js

js
import vueSnapshotSerializer from 'jest-serializer-vue';

expect.addSnapshotSerializer(vueSnapshotSerializer);

V opačném případě budou vaše snímky obsahovat velké množství escapovaných znaků ".

Pager
Předchozí stránkaSrovnání s jinými testovacími nástroji
Další stránkaBěžné chyby

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/migration

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors