Skip to content
Vitest 1
Main Navigation ÚtmutatóAPIKonfigurációHaladó
3.2.0
2.1.9
1.6.1
0.34.6

magyar

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

magyar

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

Megjelenés

Sidebar Navigation

Teszt API Dokumentáció

Mock függvények

Vi

expect

expectTypeOf

assert

assertType

Ezen az oldalon

Teszt API Dokumentáció ​

A következő típusok használatosak az alábbi típusdefiníciókban:

ts
type Awaitable<T> = T | PromiseLike<T>;
type TestFunction = () => Awaitable<void>;

interface TestOptions {
  /**
   * A teszt sikertelen lesz, ha a végrehajtása túl sokáig tart.
   */
  timeout?: number;
  /**
   * A teszt sikertelenség esetén adott alkalommal újrapróbálkozik.
   *
   * @default 0
   */
  retry?: number;
  /**
   * Ugyanazt a tesztet többször megismétli, még akkor is, ha az minden alkalommal sikertelen.
   * Ha a "retry" opció be van állítva, és a teszt sikertelen, akkor minden ciklusban felhasználja az összes újrapróbálkozást.
   * Hasznos a véletlenszerű hibák felderítéséhez.
   *
   * @default 0
   */
  repeats?: number;
}

A Vitest 1.3.0 elavulttá teszi az opciók utolsó paraméterként való használatát. A 2.0.0 verzióig, amikor ez a szintaxis eltávolításra kerül, elavultsági üzenet jelenik meg. Ha opciókat kell átadnia, használja a test függvény második argumentumát.

ts
import { test } from 'vitest';

test('flaky test', () => {}, { retry: 3 }); 
test('flaky test', { retry: 3 }, () => {}); 

Ha egy teszt függvény egy promise-t ad vissza, a futtató vár, amíg az befejeződik, hogy összegyűjtse az aszinkron elvárásokat. Ha a promise elutasításra kerül, a teszt sikertelen lesz.

TIP

A Jest esetében a TestFunction típusa lehet (done: DoneCallback) => void is. Ha ez a forma használatos, a teszt nem fejeződik be, amíg a done függvényt meg nem hívják. Ugyanezt elérheted egy async függvénnyel is, lásd a Migrációs útmutató Done Callback szekcióját.

A Vitest 1.3.0 verziójától kezdve a legtöbb opció támogatja a pontszintaxist és az objektumszintaxist is, így bármelyik stílust használhatod, amelyik neked jobban tetszik.

ts
import { test } from 'vitest';

test.skip('skipped test', () => {
  // some logic that fails right now
});
ts
import { test } from 'vitest';

test('skipped test', { skip: true }, () => {
  // some logic that fails right now
});

test ​

  • Alias: it

A test egy kapcsolódó elvárás-halmazt definiál. Fogadja a teszt nevét és egy függvényt, ami a tesztelendő elvárásokat tartalmazza.

Opcionálisan megadhatsz egy időtúllépési értéket (milliszekundumban), amely meghatározza, hogy mennyi ideig kell várni a teszt leállításáig. Az alapértelmezett érték 5 másodperc, és globálisan konfigurálható a testTimeout segítségével.

ts
import { expect, test } from 'vitest';

test('should work as expected', () => {
  expect(Math.sqrt(4)).toBe(2);
});

test.extend 0.32.3+ ​

  • Alias: it.extend

A test.extend metódussal kiegészítheted a tesztkörnyezetet egyedi fixture-ökkel. Ez egy új test függvényt ad vissza, ami szintén kiegészíthető, így további fixture-öket adhatsz hozzá, vagy felülírhatod a meglévőket a szükségleteid szerint. További információkért lásd a Tesztkörnyezet kiegészítése részt.

ts
import { expect, test } from 'vitest';

const todos = [];
const archive = [];

const myTest = test.extend({
  todos: async ({ task }, use) => {
    todos.push(1, 2, 3);
    await use(todos);
    todos.length = 0;
  },
  archive,
});

myTest('add item', ({ todos }) => {
  expect(todos.length).toBe(3);

  todos.push(4);
  expect(todos.length).toBe(4);
});

test.skip ​

  • Alias: it.skip

Ha bizonyos teszteket ki szeretnél hagyni, de valamilyen okból nem akarod törölni a kódot, használhatod a test.skip metódust a futtatásuk megakadályozására.

ts
import { assert, test } from 'vitest';

test.skip('skipped test', () => {
  // Test skipped, no error
  assert.equal(Math.sqrt(4), 3);
});

A tesztet dinamikusan is kihagyhatod, ha meghívod a környezetének skip metódusát.

ts
import { assert, test } from 'vitest';

test('skipped test', context => {
  context.skip();
  // Test skipped, no error
  assert.equal(Math.sqrt(4), 3);
});

test.skipIf ​

  • Alias: it.skipIf

Ahelyett, hogy a tesztkódot if utasítással vennéd körül, a test.skipIf metódussal kihagyhatod a tesztet, ha a feltétel igaz.

ts
import { assert, test } from 'vitest';

const isDev = process.env.NODE_ENV === 'development';

test.skipIf(isDev)('prod only test', () => {
  // this test only runs in production
});

WARNING

Ezt a szintaxist nem használhatod, ha a Vitest-et típusellenőrzőként használod.

test.runIf ​

  • Alias: it.runIf

A test.skipIf metódus ellentéte: csak akkor fut, ha a feltétel igaz.

ts
import { assert, test } from 'vitest';

const isDev = process.env.NODE_ENV === 'development';

test.runIf(isDev)('dev only test', () => {
  // this test only runs in development
});

WARNING

Ezt a szintaxist nem használhatod, ha a Vitest-et típusellenőrzőként használod.

test.only ​

  • Alias: it.only

A test.only metódussal csak bizonyos teszteket futtathatsz egy adott tesztfájlban. Ez hibakereséskor hasznos.

Opcionálisan megadhatsz egy időtúllépési értéket (milliszekundumban), amely meghatározza, hogy mennyi ideig kell várni a teszt leállításáig. Az alapértelmezett érték 5 másodperc, és globálisan konfigurálható a testTimeout segítségével.

ts
import { assert, test } from 'vitest';

test.only('test', () => {
  // Only this test (and others marked with only) are run
  assert.equal(Math.sqrt(4), 2);
});

Néha nagyon hasznos lehet, ha csak egy adott fájlban futtatod az only teszteket, figyelmen kívül hagyva az összes többi tesztet, amelyek zavarhatják a kimenetet.

Ehhez futtasd a vitest parancsot a kérdéses teszteket tartalmazó fájllal.

# vitest interesting.test.ts

test.concurrent ​

  • Alias: it.concurrent

A test.concurrent metódus párhuzamosan futtatandó teszteket jelöl. Megkapja a teszt nevét, egy aszinkron függvényt a tesztekkel, valamint egy opcionális időkorlátot (milliszekundumban).

ts
import { describe, test } from 'vitest';

// The two tests marked with concurrent will be run in parallel
describe('suite', () => {
  test('serial test', async () => {
    /* ... */
  });
  test.concurrent('concurrent test 1', async () => {
    /* ... */
  });
  test.concurrent('concurrent test 2', async () => {
    /* ... */
  });
});

A test.skip, test.only és test.todo működik a párhuzamos tesztekkel. Az alábbi kombinációk mindegyike érvényes:

ts
test.concurrent(/* ... */);
test.skip.concurrent(/* ... */); // or test.concurrent.skip(/* ... */)
test.only.concurrent(/* ... */); // or test.concurrent.only(/* ... */)
test.todo.concurrent(/* ... */); // or test.concurrent.todo(/* ... */)

Párhuzamos tesztek futtatásakor a Pillanatképeknek és az Állításoknak a helyi Tesztkörnyezet expect metódusát kell használniuk, hogy biztosítsák a megfelelő teszt azonosítását.

ts
test.concurrent('test 1', async ({ expect }) => {
  expect(foo).toMatchSnapshot();
});
test.concurrent('test 2', async ({ expect }) => {
  expect(foo).toMatchSnapshot();
});

WARNING

Ezt a szintaxist nem használhatod, ha a Vitest-et típusellenőrzőként használod.

test.sequential ​

  • Alias: it.sequential

A test.sequential szekvenciálisnak jelöli a tesztet. Ez akkor hasznos, ha a teszteket sorrendben szeretné futtatni a describe.concurrent belsejében vagy a --sequence.concurrent parancssori opcióval.

ts
import { describe, test } from 'vitest';

// ---cut---
// a { sequence: { concurrent: true } } konfigurációs opcióval
test('concurrent test 1', async () => {
  /* ... */
});
test('concurrent test 2', async () => {
  /* ... */
});

test.sequential('sequential test 1', async () => {
  /* ... */
});
test.sequential('sequential test 2', async () => {
  /* ... */
});

// párhuzamos csomagban
describe.concurrent('suite', () => {
  test('concurrent test 1', async () => {
    /* ... */
  });
  test('concurrent test 2', async () => {
    /* ... */
  });

  test.sequential('sequential test 1', async () => {
    /* ... */
  });
  test.sequential('sequential test 2', async () => {
    /* ... */
  });
});

test.todo ​

  • Alias: it.todo

A test.todo metódussal létrehozhatod a később megvalósítandó tesztek helyőrzőit. A tesztekhez egy bejegyzés jelenik meg a jelentésben, így láthatod, hogy még hány tesztet kell megvalósítanod.

ts
// An entry will be shown in the report for this test
test.todo('unimplemented test');

test.fails ​

  • Alias: it.fails

A test.fails metódussal jelezheted, hogy egy állítás várhatóan sikertelen lesz.

ts
import { expect, test } from 'vitest';

function myAsyncFunc() {
  return new Promise(resolve => resolve(1));
}
test.fails('fail test', async () => {
  await expect(myAsyncFunc()).rejects.toBe(1);
});

WARNING

Ezt a szintaxist nem használhatod, ha a Vitest-et típusellenőrzőként használod.

test.each ​

  • Alias: it.each

Használd a test.each metódust, ha ugyanazt a tesztet különböző bemeneti adatokkal szeretnéd futtatni. A teszt nevébe paramétereket injektálhatsz a printf formázással a tesztfüggvény paramétereinek sorrendjében.

  • %s: string
  • %d: szám
  • %i: egész szám
  • %f: lebegőpontos érték
  • %j: json
  • %o: objektum
  • %#: a teszteset indexe
  • %%: egyetlen százalékjel ('%')
ts
import { expect, test } from 'vitest';

// ---cut---
test.each([
  [1, 1, 2],
  [1, 2, 3],
  [2, 1, 3],
])('add(%i, %i) -> %i', (a, b, expected) => {
  expect(a + b).toBe(expected);
});

// this will return
// ✓ add(1, 1) -> 2
// ✓ add(1, 2) -> 3
// ✓ add(2, 1) -> 3

Ha objektumokat használsz argumentumként, az objektumok tulajdonságaihoz a $ előtaggal is hozzáférhetsz.

ts
test.each([
  { a: 1, b: 1, expected: 2 },
  { a: 1, b: 2, expected: 3 },
  { a: 2, b: 1, expected: 3 },
])('add($a, $b) -> $expected', ({ a, b, expected }) => {
  expect(a + b).toBe(expected);
});

// this will return
// ✓ add(1, 1) -> 2
// ✓ add(1, 2) -> 3
// ✓ add(2, 1) -> 3

Ha objektumokat használsz argumentumként, az objektumok attribútumaihoz a . segítségével is hozzáférhetsz.

ts
test.each`
  a             | b      | expected
  ${{ val: 1 }} | ${'b'} | ${'1b'}
  ${{ val: 2 }} | ${'b'} | ${'2b'}
  ${{ val: 3 }} | ${'b'} | ${'3b'}
`('add($a.val, $b) -> $expected', ({ a, b, expected }) => {
  expect(a.val + b).toBe(expected);
});

// this will return
// ✓ add(1, b) -> 1b
// ✓ add(2, b) -> 2b
// ✓ add(3, b) -> 3b

A Vitest 0.25.3-tól kezdve sablon string táblázatot is használhatsz.

  • Az első sornak oszlopneveket kell tartalmaznia, | karakterrel elválasztva;
  • Egy vagy több további adatsor sablon literál kifejezésként megadva a ${value} szintaxissal.
ts
import { expect, test } from 'vitest';

// ---cut---
test.each`
  a             | b      | expected
  ${1}          | ${1}   | ${2}
  ${'a'}        | ${'b'} | ${'ab'}
  ${[]}         | ${'b'} | ${'b'}
  ${{}}         | ${'b'} | ${'[object Object]b'}
  ${{ asd: 1 }} | ${'b'} | ${'[object Object]b'}
`('returns $expected when $a is added $b', ({ a, b, expected }) => {
  expect(a + b).toBe(expected);
});

Ha hozzá szeretnél férni a TestContext-hez, használd a describe.each metódust egyetlen teszttel.

TIP

A Vitest a $values értékeket a chai format metódusával dolgozza fel. Ha az érték túl csonka, növelheted a chaiConfig.truncateThreshold értékét a konfigurációs fájlban.

WARNING

Ezt a szintaxist nem használhatod, ha a Vitest-et típusellenőrzőként használod.

bench ​

  • Típus: (name: string | Function, fn: BenchFunction, options?: BenchOptions) => void

A bench egy benchmarkot definiál. A Vitest szóhasználatában a benchmark egy olyan függvény, amely műveletek sorozatát határozza meg. A Vitest többször futtatja ezt a függvényt, hogy különböző teljesítménymutatókat mutasson.

A Vitest a háttérben a tinybench könyvtárat használja, örökölve annak összes opcióját, amelyek harmadik argumentumként használhatók.

ts
import { bench } from 'vitest';

bench(
  'normal sorting',
  () => {
    const x = [1, 5, 4, 2, 3];
    x.sort((a, b) => {
      return a - b;
    });
  },
  { time: 1000 }
);
ts
export interface Options {
  /**
   * A benchmark feladat futtatásához szükséges idő (milliszekundumban)
   * @default 500
   */
  time?: number;

  /**
   * A feladat futtatásának száma, még akkor is, ha az idő opció befejeződött
   * @default 10
   */
  iterations?: number;

  /**
   * Függvény az aktuális időbélyeg lekéréséhez milliszekundumban
   */
  now?: () => number;

  /**
   * Egy AbortSignal a benchmark megszakításához
   */
  signal?: AbortSignal;

  /**
   * Bemelegítési idő (milliszekundumban)
   * @default 100ms
   */
  warmupTime?: number;

  /**
   * Bemelegítési iterációk
   * @default 5
   */
  warmupIterations?: number;

  /**
   * Beállító függvény, amely minden benchmark feladat (ciklus) előtt fut
   */
  setup?: Hook;

  /**
   * Lebontó függvény, amely minden benchmark feladat (ciklus) után fut
   */
  teardown?: Hook;
}

bench.skip ​

  • Típus: (name: string | Function, fn: BenchFunction, options?: BenchOptions) => void

A bench.skip szintaxissal kihagyhatod bizonyos benchmarkok futtatását.

ts
import { bench } from 'vitest';

bench.skip('normal sorting', () => {
  const x = [1, 5, 4, 2, 3];
  x.sort((a, b) => {
    return a - b;
  });
});

bench.only ​

  • Típus: (name: string | Function, fn: BenchFunction, options?: BenchOptions) => void

A bench.only metódussal csak bizonyos benchmarkokat futtathatsz egy adott tesztfájlban. Ez hibakereséskor hasznos.

ts
import { bench } from 'vitest';

bench.only('normal sorting', () => {
  const x = [1, 5, 4, 2, 3];
  x.sort((a, b) => {
    return a - b;
  });
});

bench.todo ​

  • Típus: (name: string | Function) => void

A bench.todo metódussal létrehozhatod a később megvalósítandó benchmarkok helyőrzőit.

ts
import { bench } from 'vitest';

bench.todo('unimplemented test');

describe ​

Ha a test vagy bench függvényeket egy fájl legfelső szintjén használod, azok a fájl implicit tesztcsomagjába tartoznak. A describe használatával új tesztcsomagot definiálhatsz az aktuális kontextusban. Ez egy kapcsolódó tesztekből, benchmarkokból és más beágyazott tesztcsomagokból álló halmaz. A tesztcsomagokkal rendszerezheted a teszteket és benchmarkokat, ezáltal átláthatóbbá téve az eredményeket.

ts
// basic.spec.ts
// tesztek rendszerezése

import { describe, expect, test } from 'vitest';

const person = {
  isActive: true,
  age: 32,
};

describe('person', () => {
  test('a személy definiált', () => {
    expect(person).toBeDefined();
  });

  test('aktív', () => {
    expect(person.isActive).toBeTruthy();
  });

  test('életkor korlát', () => {
    expect(person.age).toBeLessThanOrEqual(32);
  });
});
ts
// basic.bench.ts
// benchmarkok rendszerezése

import { bench, describe } from 'vitest';

describe('sort', () => {
  bench('normál', () => {
    const x = [1, 5, 4, 2, 3];
    x.sort((a, b) => {
      return a - b;
    });
  });

  bench('fordított sorrend', () => {
    const x = [1, 5, 4, 2, 3];
    x.reverse().sort((a, b) => {
      return a - b;
    });
  });
});

A describe blokkokat egymásba is ágyazhatod, ha a tesztek vagy benchmarkok hierarchikus felépítésűek:

ts
import { describe, expect, test } from 'vitest';

function numberToCurrency(value: number | string) {
  if (typeof value !== 'number') throw new Error('Value must be a number');

  return value
    .toFixed(2)
    .toString()
    .replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}

describe('numberToCurrency', () => {
  describe('érvénytelen szám esetén', () => {
    test('nem szám típusú érték hibát ad', () => {
      expect(() => numberToCurrency('abc')).toThrowError();
    });
  });

  describe('érvényes szám esetén', () => {
    test('helyes pénznemformátumot ad vissza', () => {
      expect(numberToCurrency(10000)).toBe('10,000.00');
    });
  });
});

describe.skip ​

  • Alias: suite.skip

A describe.skip használatával kihagyhatsz egy adott describe blokkot.

ts
import { assert, describe, test } from 'vitest';

describe.skip('kihagyott tesztcsomag', () => {
  test('négyzetgyök', () => {
    // A tesztcsomag kihagyásra került, nincs hiba
    assert.equal(Math.sqrt(4), 3);
  });
});

describe.skipIf ​

  • Alias: suite.skipIf

Bizonyos esetekben a tesztcsomagokat többször is futtathatod különböző környezetekben. Néhány tesztcsomag környezetfüggő lehet. Ahelyett, hogy a tesztcsomagot if utasítással vennéd körül, használhatod a describe.skipIf függvényt a tesztcsomag kihagyására, ha a feltétel igaz.

ts
import { describe, test } from 'vitest';

const isDev = process.env.NODE_ENV === 'development';

describe.skipIf(isDev)('csak élesben futó teszt', () => {
  // ez a teszt csak éles környezetben fut
});

WARNING

Ezt a szintaxist nem használhatod, ha a Vitestet típusellenőrzőként használod.

describe.runIf ​

  • Alias: suite.runIf

Ellentéte a describe.skipIf-nek.

ts
import { assert, describe, test } from 'vitest';

const isDev = process.env.NODE_ENV === 'development';

describe.runIf(isDev)('dev only test suite', () => {
  // this test suite only runs in development
});

WARNING

Nem használhatja ezt a szintaxist, ha a Vitestet típusellenőrzőként használja.

describe.only ​

  • Típus: (name: string | Function, fn: TestFunction, options?: number | TestOptions) => void

A describe.only használatával csak a megjelölt tesztcsomagokat futtathatod.

ts
import { assert, describe, test } from 'vitest';
// ---cut---
// Csak ez a tesztcsomag (és a többi "only" jelölésű) fut le
describe.only('tesztcsomag', () => {
  test('négyzetgyök', () => {
    assert.equal(Math.sqrt(4), 3);
  });
});

describe('másik tesztcsomag', () => {
  // ... kihagyásra kerül
});

Néha hasznos lehet, ha egy adott fájlban csak az only teszteket futtatjuk, figyelmen kívül hagyva a többi tesztet, amelyek zavarják a kimenetet.

Ehhez futtasd a vitest parancsot a kérdéses teszteket tartalmazó fájllal.

# vitest interesting.test.ts

describe.concurrent ​

  • Alias: suite.concurrent

A describe.concurrent egy tesztcsomagban minden tesztet párhuzamosnak jelöl meg.

ts
import { describe, test } from 'vitest';
// ---cut---
// A tesztcsomagban lévő összes teszt párhuzamosan fut
describe.concurrent('tesztcsomag', () => {
  test('párhuzamos teszt 1', async () => {
    /* ... */
  });
  test('párhuzamos teszt 2', async () => {
    /* ... */
  });
  test.concurrent('párhuzamos teszt 3', async () => {
    /* ... */
  });
});

A .skip, .only és .todo érvényes a párhuzamos tesztcsomagokra. Az alábbi kombinációk mind érvényesek:

ts
describe.concurrent(/* ... */);
describe.skip.concurrent(/* ... */); // vagy describe.concurrent.skip(/* ... */)
describe.only.concurrent(/* ... */); // vagy describe.concurrent.only(/* ... */)
describe.todo.concurrent(/* ... */); // vagy describe.concurrent.todo(/* ... */)

Konkurens tesztek futtatásakor a pillanatképeknek (Snapshots) és az állításoknak (Assertions) a helyi Teszt Konteksztusból kell használniuk az expect függvényt, hogy a megfelelő teszt kerüljön felismerésre.

ts
describe.concurrent('tesztcsomag', () => {
  test('párhuzamos teszt 1', async ({ expect }) => {
    expect(foo).toMatchSnapshot();
  });
  test('párhuzamos teszt 2', async ({ expect }) => {
    expect(foo).toMatchSnapshot();
  });
});

WARNING

Ezt a szintaxist nem használhatod, ha a Vitestet típusellenőrzőként használod.

describe.sequential ​

  • Alias: suite.sequential

A describe.sequential egy tesztcsomagban minden tesztet szekvenciálisnak jelöl meg. Ez akkor hasznos, ha a teszteket szekvenciálisan szeretnéd futtatni a describe.concurrent blokkon belül, vagy a --sequence.concurrent parancssori opcióval.

ts
import { describe, test } from 'vitest';
// ---cut---
describe.concurrent('tesztcsomag', () => {
  test('párhuzamos teszt 1', async () => {
    /* ... */
  });
  test('párhuzamos teszt 2', async () => {
    /* ... */
  });

  describe.sequential('', () => {
    test('szekvenciális teszt 1', async () => {
      /* ... */
    });
    test('szekvenciális teszt 2', async () => {
      /* ... */
    });
  });
});

describe.shuffle ​

  • Alias: suite.shuffle

A Vitest lehetővé teszi az összes teszt véletlenszerű sorrendben történő futtatását a --sequence.shuffle CLI flag-en vagy a sequence.shuffle konfigurációs opción keresztül, de ha a tesztcsomagodnak csak egy részét szeretnéd véletlenszerű sorrendben futtatni, akkor megjelölheted ezzel a flag-gel.

ts
import { describe, test } from 'vitest';
// ---cut---
describe.shuffle('tesztcsomag', () => {
  test('véletlen sorrendű teszt 1', async () => {
    /* ... */
  });
  test('véletlen sorrendű teszt 2', async () => {
    /* ... */
  });
  test('véletlen sorrendű teszt 3', async () => {
    /* ... */
  });
});
// a sorrend a sequence.seed konfigurációs opciótól függ (alapértelmezett értéke: Date.now())

A .skip, .only és .todo működik a véletlenszerű tesztcsomagokkal.

WARNING

Ezt a szintaxist nem használhatod, ha a Vitestet típusellenőrzőként használod.

describe.todo ​

  • Alias: suite.todo

A describe.todo használatával csonkokat (stub) hozhatsz létre a később megvalósítandó tesztcsomagokhoz. A tesztekhez bejegyzés jelenik meg a jelentésben, így tudod, hogy még hány tesztet kell megvalósítanod.

ts
// Ehhez a tesztcsomaghoz bejegyzés jelenik meg a jelentésben
describe.todo('nem implementált tesztcsomag');

describe.each ​

  • Alias: suite.each

A describe.each akkor használd, ha több teszt is ugyanazoktól az adatoktól függ.

ts
import { describe, expect, test } from 'vitest';
// ---cut---
describe.each([
  { a: 1, b: 1, expected: 2 },
  { a: 1, b: 2, expected: 3 },
  { a: 2, b: 1, expected: 3 },
])('objektum összeadása ($a, $b)', ({ a, b, expected }) => {
  test(`visszaadja: ${expected}`, () => {
    expect(a + b).toBe(expected);
  });

  test(`a visszaadott érték nem lehet nagyobb, mint ${expected}`, () => {
    expect(a + b).not.toBeGreaterThan(expected);
  });

  test(`a visszaadott érték nem lehet kisebb, mint ${expected}`, () => {
    expect(a + b).not.toBeLessThan(expected);
  });
});

A Vitest 0.25.3-tól kezdve sablon string táblázatot is használhatsz.

  • Az első sornak oszlopneveket kell tartalmaznia, | karakterrel elválasztva;
  • Egy vagy több további adatsor sablon literál kifejezésként megadva a ${value} szintaxissal.
ts
import { describe, expect, test } from 'vitest';
// ---cut---
describe.each`
  a             | b      | expected
  ${1}          | ${1}   | ${2}
  ${'a'}        | ${'b'} | ${'ab'}
  ${[]}         | ${'b'} | ${'b'}
  ${{}}         | ${'b'} | ${'[object Object]b'}
  ${{ asd: 1 }} | ${'b'} | ${'[object Object]b'}
`('sablon string összeadása ($a, $b)', ({ a, b, expected }) => {
  test(`visszaadja: ${expected}`, () => {
    expect(a + b).toBe(expected);
  });
});

WARNING

Ezt a szintaxist nem használhatod, ha a Vitestet típusellenőrzőként használod.

Felkészülés és takarítás ​

Ezek a függvények lehetővé teszik, hogy bekapcsolódj a tesztek életciklusába, így elkerülheted a beállítási és lebontási kód ismétlését. Az aktuális kontextusra vonatkoznak: a fájlra, ha a legfelső szinten használják őket, vagy az aktuális tesztcsomagra, ha egy describe blokkon belül vannak. Ezek a hook-ok nem kerülnek meghívásra, ha a Vitestet típusellenőrzőként futtatod.

beforeEach ​

  • Típus: beforeEach(fn: () => Awaitable<void>, timeout?: number)

Regisztrál egy visszahívást, amelyet az aktuális kontextusban lévő tesztek előtt kell végrehajtani. Ha a függvény egy promise-t ad vissza, a Vitest megvárja, amíg a promise feloldódik, mielőtt futtatná a tesztet.

Opcionálisan megadhatsz egy időkorlátot (ezredmásodpercben), amely meghatározza, hogy mennyi ideig kell várni a leállítás előtt. Az alapértelmezett érték 5 másodperc.

ts
import { beforeEach } from 'vitest';

beforeEach(async () => {
  // Törli a mock-okat, és hozzáad néhány tesztadatot minden tesztfuttatás előtt
  await stopMocking();
  await addUser({ name: 'John' });
});

Itt a beforeEach biztosítja, hogy a felhasználó minden teszthez hozzá legyen adva.

A Vitest v0.10.0 óta a beforeEach egy opcionális cleanup függvényt is elfogad (ami az afterEach-nek felel meg).

ts
import { beforeEach } from 'vitest';

beforeEach(async () => {
  // egyszer fut le minden tesztfuttatás előtt
  await prepareSomething();

  // eltakarító függvény, egyszer fut le minden tesztfuttatás után
  return async () => {
    await resetSomething();
  };
});

afterEach ​

  • Típus: afterEach(fn: () => Awaitable<void>, timeout?: number)

Regisztrál egy visszahívást, amelyet az aktuális kontextusban lévő tesztek mindegyike után meg kell hívni. Ha a függvény egy promise-t ad vissza, a Vitest megvárja, amíg a promise feloldódik, mielőtt folytatná.

Opcionálisan megadhatsz egy időkorlátot (ezredmásodpercben), amely meghatározza, hogy mennyi ideig kell várni a leállítás előtt. Az alapértelmezett érték 5 másodperc.

ts
import { afterEach } from 'vitest';

afterEach(async () => {
  await clearTestingData(); // tesztadatok törlése minden tesztfuttatás után
});

Itt az afterEach biztosítja, hogy a tesztadatok minden teszt után törlődjenek.

TIP

A Vitest 1.3.0 hozzáadta az onTestFinished hook-ot. Meghívhatja a teszt futtatása közben, hogy kitakarítsa a teszt futása utáni állapotot.

beforeAll ​

  • Típus: beforeAll(fn: () => Awaitable<void>, timeout?: number)

Regisztrál egy visszahívást, amelyet egyszer meg kell hívni az összes teszt futtatásának megkezdése előtt az aktuális kontextusban. Ha a függvény egy promise-t ad vissza, a Vitest megvárja, amíg a promise feloldódik, mielőtt futtatná a teszteket.

Opcionálisan megadhatsz egy időkorlátot (ezredmásodpercben), amely meghatározza, hogy mennyi ideig kell várni a leállítás előtt. Az alapértelmezett érték 5 másodperc.

ts
import { beforeAll } from 'vitest';

beforeAll(async () => {
  await startMocking(); // egyszer fut le az összes teszt futtatása előtt
});

Itt a beforeAll biztosítja, hogy a mock adatok be legyenek állítva a tesztek futtatása előtt.

A Vitest v0.10.0 óta a beforeAll egy opcionális cleanup függvényt is elfogad (ami az afterAll-nak felel meg).

ts
import { beforeAll } from 'vitest';

beforeAll(async () => {
  // egyszer fut le az összes teszt futtatása előtt
  await startMocking();

  // eltakarító függvény, egyszer fut le az összes teszt futtatása után
  return async () => {
    await stopMocking();
  };
});

afterAll ​

  • Típus: afterAll(fn: () => Awaitable<void>, timeout?: number)

Regisztrál egy visszahívást, amelyet egyszer meg kell hívni az összes teszt lefutása után az aktuális kontextusban. Ha a függvény egy promise-t ad vissza, a Vitest megvárja, amíg a promise feloldódik, mielőtt folytatná.

Opcionálisan megadhatsz egy időkorlátot (ezredmásodpercben), amely meghatározza, hogy mennyi ideig kell várni a leállítás előtt. Az alapértelmezett érték 5 másodperc.

ts
import { afterAll } from 'vitest';

afterAll(async () => {
  await stopMocking(); // ez a metódus az összes teszt lefutása után fut le
});

Itt az afterAll biztosítja, hogy a stopMocking metódus az összes teszt lefutása után meghívásra kerüljön.

Teszt Hookok ​

A Vitest néhány hookot biztosít, amelyeket a teszt végrehajtása során hívhatsz meg, hogy a teszt befejezésekor megtisztítsd az állapotot.

WARNING

Ezek a hookok hibát dobnak, ha a teszt törzsén kívül hívják meg őket.

onTestFinished 1.3.0+ ​

Ez a hook mindig a teszt futásának befejezése után kerül meghívásra. Az afterEach hookok után hívódik meg, mivel azok befolyásolhatják a teszt eredményét. Egy TaskResult objektumot kap a teszt aktuális eredményével.

ts
import { onTestFinished, test } from 'vitest';

test('performs a query', () => {
  const db = connectDb();
  onTestFinished(() => db.close());
  db.query('SELECT * FROM users');
});

WARNING

Ha párhuzamosan futtatsz teszteket, akkor mindig a tesztkörnyezetből kell használnod az onTestFinished hookot, mivel a Vitest nem követi a párhuzamos teszteket a globális hookokban:

ts
import { test } from 'vitest';

test.concurrent('performs a query', ({ onTestFinished }) => {
  const db = connectDb();
  onTestFinished(() => db.close());
  db.query('SELECT * FROM users');
});

Ez a hook különösen hasznos, ha újrafelhasználható logikát hozol létre:

ts
// Ez lehet egy külön fájlban
function getTestDb() {
  const db = connectMockedDb();
  onTestFinished(() => db.close());
  return db;
}

test('performs a user query', async () => {
  const db = getTestDb();
  expect(await db.query('SELECT * from users').perform()).toEqual([]);
});

test('performs an organization query', async () => {
  const db = getTestDb();
  expect(await db.query('SELECT * from organizations').perform()).toEqual([]);
});

TIP

Ez a hook mindig fordított sorrendben kerül meghívásra, és nincs rá hatással a sequence.hooks opció.

onTestFailed ​

Ez a hook csak a teszt sikertelen végrehajtása után kerül meghívásra. Az afterEach hookok után hívódik meg, mivel azok befolyásolhatják a teszt eredményét. Egy TaskResult objektumot kap a teszt aktuális eredményével. Ez a hook hasznos a hibakereséshez.

ts
import { onTestFailed, test } from 'vitest';

test('performs a query', () => {
  const db = connectDb();
  onTestFailed(e => {
    console.log(e.result.errors);
  });
  db.query('SELECT * FROM users');
});

WARNING

Ha párhuzamosan futtatsz teszteket, akkor mindig a tesztkörnyezetből kell használnod az onTestFailed hookot, mivel a Vitest nem követi a párhuzamos teszteket a globális hookokban:

ts
import { test } from 'vitest';

test.concurrent('performs a query', ({ onTestFailed }) => {
  const db = connectDb();
  onTestFailed(result => {
    console.log(result.errors);
  });
  db.query('SELECT * FROM users');
});
Pager
Következő oldalMock függvények

A MIT licenc alapján kiadva.

Copyright (c) 2021-Present Vitest Team

https://v1.vitest.dev/api/

A MIT licenc alapján kiadva.

Copyright (c) 2021-Present Vitest Team