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

Mock függvények ​

Létrehozhatsz egy mock függvényt a vi.fn metódussal, hogy nyomon követhesd a végrehajtását. Ha egy már létező objektumon szeretnél egy metódust nyomon követni, akkor a vi.spyOn metódust használhatod:

js
import { vi } from 'vitest';

const fn = vi.fn();
fn('hello world');
fn.mock.calls[0] === ['hello world'];

const market = {
  getApples: () => 100,
};

const getApplesSpy = vi.spyOn(market, 'getApples');
market.getApples();
getApplesSpy.mock.calls.length === 1;

A mock eredmények ellenőrzéséhez használj állításokat (pl. toHaveBeenCalled) az expect metóduson. Ez az API referencia leírja a mock viselkedésének beállításához használható tulajdonságokat és metódusokat.

getMockImplementation ​

  • Típus: (...args: any) => any

Visszaadja a mock aktuális implementációját, amennyiben létezik.

Ha a mock a vi.fn segítségével lett létrehozva, akkor a függvénynek átadott függvényt tekinti a mock implementációjának.

Ha a mock a vi.spyOn segítségével lett létrehozva, akkor undefined értéket ad vissza, kivéve, ha egyedi implementációt adtak meg.

getMockName ​

  • Típus: () => string

Ezzel a metódussal lekérdezheted a mock nevét, amit a .mockName(name) metódussal adtál meg.

mockClear ​

  • Típus: () => MockInstance

Törli az összes hívással kapcsolatos információt. A meghívása után a .mock összes tulajdonsága üres lesz. Ez a metódus nem állítja vissza a mock implementációkat. Akkor hasznos, ha a mock-ot különböző állítások között kell tisztítani.

Ha azt szeretnéd, hogy ez a metódus automatikusan meghívásra kerüljön minden teszt előtt, engedélyezd a clearMocks beállítást a konfigurációban.

mockName ​

  • Típus: (name: string) => MockInstance

Beállítja a belső mock nevet. Hasznos, ha sikertelen állítás esetén látni szeretnéd a mock nevét.

mockImplementation ​

  • Típus: (fn: Function) => MockInstance

Átvesz egy függvényt, amely mock implementációként fog szolgálni.

ts
import { vi } from 'vitest';
// ---cut---
const mockFn = vi.fn().mockImplementation(apples => apples + 1);
// vagy: vi.fn(apples => apples + 1);

const NelliesBucket = mockFn(0);
const BobsBucket = mockFn(1);

NelliesBucket === 1; // true
BobsBucket === 2; // true

mockFn.mock.calls[0][0] === 0; // true
mockFn.mock.calls[1][0] === 1; // true

mockImplementationOnce ​

  • Típus: (fn: Function) => MockInstance

Átvesz egy függvényt, amelyet a mock implementációjaként fog használni a következő hívás során. Láncolható, így több hívás különböző eredményeket adhat.

ts
import { vi } from 'vitest';
// ---cut---
const myMockFn = vi
  .fn()
  .mockImplementationOnce(() => true)
  .mockImplementationOnce(() => false);

myMockFn(); // true
myMockFn(); // false

Ha a mockolt függvényhez nincs több mockImplementationOnce implementáció, akkor az alapértelmezett implementációt használja. Az alapértelmezett implementációt a vi.fn(() => defaultValue) vagy a .mockImplementation(() => defaultValue) segítségével lehet beállítani.

ts
import { vi } from 'vitest';
// ---cut---
const myMockFn = vi
  .fn(() => 'default')
  .mockImplementationOnce(() => 'first call')
  .mockImplementationOnce(() => 'second call');

// 'first call', 'second call', 'default', 'default'
console.log(myMockFn(), myMockFn(), myMockFn(), myMockFn());

withImplementation ​

  • Típus: (fn: Function, callback: () => void) => MockInstance
  • Típus: (fn: Function, callback: () => Promise<unknown>) => Promise<MockInstance>

Ideiglenesen felülírja az eredeti mock implementációt, amíg a callback végrehajtásra kerül.

js
import { vi } from 'vitest';
// ---cut---
const myMockFn = vi.fn(() => 'original');

myMockFn.withImplementation(
  () => 'temp',
  () => {
    myMockFn(); // 'temp'
  }
);

myMockFn(); // 'original'

Használható aszinkron callback-kel is. A metódust meg kell várni (await), hogy utána az eredeti implementáció használható legyen.

ts
test('async callback', () => {
  const myMockFn = vi.fn(() => 'original');

  // Megvárjuk ezt a hívást, mivel a callback aszinkron
  await myMockFn.withImplementation(
    () => 'temp',
    async () => {
      myMockFn(); // 'temp'
    }
  );

  myMockFn(); // 'original'
});

Fontos, hogy ez a metódus felülírja a mockImplementationOnce metódussal beállított implementációkat.

mockRejectedValue ​

  • Típus: (value: any) => MockInstance

Átvesz egy értéket, amellyel elutasít, amikor az aszinkron függvényt meghívják.

ts
import { vi } from 'vitest';
// ---cut---
const asyncMock = vi.fn().mockRejectedValue(new Error('Async error'));

await asyncMock(); // throws "Async error"

mockRejectedValueOnce ​

  • Típus: (value: any) => MockInstance

Átvesz egy értéket, amelyet a következő függvényhívás során elutasít. Ha láncolva van, minden egymást követő hívás a megadott értéket fogja elutasítani.

ts
import { vi } from 'vitest';
// ---cut---
const asyncMock = vi
  .fn()
  .mockResolvedValueOnce('first call')
  .mockRejectedValueOnce(new Error('Async error'));

await asyncMock(); // first call
await asyncMock(); // throws "Async error"

mockReset ​

  • Típus: () => MockInstance

Ugyanazt csinálja, mint a mockClear, és a belső implementációt egy üres függvénnyé alakítja. Ez törli az összes "once" implementációt is. Akkor hasznos, ha teljesen vissza szeretnéd állítani a mock-ot az alapértelmezett állapotba.

Ha azt szeretnéd, hogy ez a metódus automatikusan meghívásra kerüljön minden teszt előtt, engedélyezheted a mockReset beállítást a konfigurációban.

mockRestore ​

  • Típus: () => MockInstance

A mockReset mellett visszaállítja az eredeti függvény implementációját is.

Ne feledd, hogy a vi.fn()-ből származó mock visszaállítása az implementációt egy üres függvényre állítja, amely undefined értéket ad vissza. A vi.fn(impl) visszaállítása az implementációt az impl-re állítja vissza.

Ha azt szeretnéd, hogy ez a metódus automatikusan meghívásra kerüljön minden teszt előtt, engedélyezheted a restoreMocks beállítást a konfigurációban.

mockResolvedValue ​

  • Típus: (value: any) => MockInstance

Elfogad egy értéket, amelyet felold, amikor az aszinkron függvényt meghívják.

ts
import { vi } from 'vitest';
// ---cut---
const asyncMock = vi.fn().mockResolvedValue(42);

await asyncMock(); // 42

mockResolvedValueOnce ​

  • Típus: (value: any) => MockInstance

Elfogad egy értéket, amelyet a következő függvényhívás során felold. Ha láncolva van, minden egymást követő hívás a megadott értéket fogja feloldani.

ts
import { vi } from 'vitest';
// ---cut---
const asyncMock = vi
  .fn()
  .mockResolvedValue('default')
  .mockResolvedValueOnce('first call')
  .mockResolvedValueOnce('second call');

await asyncMock(); // first call
await asyncMock(); // second call
await asyncMock(); // default
await asyncMock(); // default

mockReturnThis ​

  • Típus: () => MockInstance

Akkor használd ezt, ha vissza kell adnod a this kontextust a metódusból a tényleges implementáció meghívása nélkül. Ez egy rövidítés a következőhöz:

ts
spy.mockImplementation(function () {
  return this;
});

mockReturnValue ​

  • Típus: (value: any) => MockInstance

Elfogad egy értéket, amelyet visszaad, amikor a mock függvényt meghívják.

ts
import { vi } from 'vitest';
// ---cut---
const mock = vi.fn();
mock.mockReturnValue(42);
mock(); // 42
mock.mockReturnValue(43);
mock(); // 43

mockReturnValueOnce ​

  • Típus: (value: any) => MockInstance

Elfogad egy értéket, amelyet a következő függvényhívás során visszaad. Ha láncolva van, minden egymást követő hívás a megadott értéket fogja visszaadni.

Ha nincsenek többé mockReturnValueOnce értékek, a mock visszalép a korábban definiált implementációhoz, ha van ilyen.

ts
import { vi } from 'vitest';
// ---cut---
const myMockFn = vi
  .fn()
  .mockReturnValue('default')
  .mockReturnValueOnce('first call')
  .mockReturnValueOnce('second call');

// 'first call', 'second call', 'default', 'default'
console.log(myMockFn(), myMockFn(), myMockFn(), myMockFn());

mock.calls ​

Ez egy tömb, amely minden egyes hívás összes argumentumát tartalmazza. A tömb egy eleme az adott hívás argumentumait reprezentálja.

js
const fn = vi.fn();

fn('arg1', 'arg2');
fn('arg3');

fn.mock.calls ===
  [
    ['arg1', 'arg2'], // first call
    ['arg3'], // second call
  ];

mock.lastCall ​

Ez az utolsó hívás argumentumait tartalmazza. Ha a mock-ot nem hívták meg, akkor undefined értéket ad vissza.

mock.results ​

Ez egy tömb, amely az összes értéket tartalmazza, amelyet a függvény visszaadott. A tömb egy eleme egy objektum, amelynek type és value tulajdonságai vannak. A rendelkezésre álló típusok:

  • 'return' - a függvény kivétel nélkül tért vissza.
  • 'throw' - a függvény egy értéket dobott.

A value tulajdonság a visszaadott értéket vagy a dobott hibát tartalmazza. Ha a függvény egy promise-t adott vissza, akkor a value a feloldott érték lesz, nem a tényleges Promise, hacsak nem oldották fel soha.

js
const fn = vi
  .fn()
  .mockReturnValueOnce('result')
  .mockImplementationOnce(() => {
    throw new Error('thrown error');
  });

const result = fn(); // returned 'result'

try {
  fn(); // threw Error
} catch {}

fn.mock.results ===
  [
    // first result
    {
      type: 'return',
      value: 'result',
    },
    // last result
    {
      type: 'throw',
      value: Error,
    },
  ];

mock.invocationCallOrder ​

A mock végrehajtásának sorrendje. Ez egy számtömböt ad vissza, amelyet az összes definiált mock megoszt.

js
const fn1 = vi.fn();
const fn2 = vi.fn();

fn1();
fn2();
fn1();

fn1.mock.invocationCallOrder === [1, 3];
fn2.mock.invocationCallOrder === [2];

mock.instances ​

Ez egy tömb, amely az összes példányt tartalmazza, amelyet a mock a new kulcsszóval történő meghívásakor példányosított. Ne feledd, hogy ez a függvény tényleges kontextusa (this), nem pedig a visszatérési érték.

WARNING

Ha a mock-ot a new MyClass() segítségével példányosították, akkor a mock.instances egy egyetlen értékkel rendelkező tömb lesz:

js
const MyClass = vi.fn();
const a = new MyClass();

MyClass.mock.instances[0] === a;

Ha egy értéket adsz vissza a konstruktorból, az nem lesz a instances tömbben, hanem a results tömbben:

js
const Spy = vi.fn(() => ({ method: vi.fn() }));
const a = new Spy();

Spy.mock.instances[0] !== a;
Spy.mock.results[0] === a;
Pager
Előző oldalTeszt API Dokumentáció
Következő oldalVi

A MIT licenc alapján kiadva.

Copyright (c) 2021-Present Vitest Team

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

A MIT licenc alapján kiadva.

Copyright (c) 2021-Present Vitest Team