Skip to content
Vitest 2
Main Navigation ÚtmutatóAPIKonfigurációBöngésző módHaladó
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 végrehajtás nyomon követésére a vi.fn metódussal. Ha egy már létező objektum metódusát szeretnéd nyomon követni, használhatod a vi.spyOn metódust:

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ényének ellenőrzéséhez használj mock állításokat (pl. toHaveBeenCalled) az expect függvényen. Ez az API referencia leírja az elérhető tulajdonságokat és metódusokat a mock viselkedésének kezeléséhez.

TIP

Az alábbi típusokban az egyéni függvény implementációja egy <T> generikussal van jelölve.

getMockImplementation ​

ts
function getMockImplementation(): T | undefined;

Visszaadja az aktuális mock implementációt, ha létezik.

Ha a mock a vi.fn metódussal jött létre, akkor a megadott metódust fogja használni mock implementációként.

Ha a mock a vi.spyOn metódussal jött létre, akkor undefined értéket ad vissza, kivéve, ha egyéni implementációt adtak meg.

getMockName ​

ts
function getMockName(): string;

Használd ezt a .mockName(name) metódussal a mockhoz rendelt név visszaadására. Alapértelmezés szerint vi.fn() értéket ad vissza.

mockClear ​

ts
function mockClear(): MockInstance<T>;

Töröl minden információt minden hívásról. A hívás után a .mock összes tulajdonsága visszaáll az eredeti állapotába. Ez a metódus nem állítja vissza az implementációkat. Hasznos a mockok tisztítására a különböző állítások között.

Ennek a metódusnak minden teszt előtt automatikusan hívásához engedélyezd a clearMocks beállítást a konfigurációban.

mockName ​

ts
function mockName(name: string): MockInstance<T>;

Beállítja a belső mock nevet. Ez hasznos a mock azonosításához, amikor egy állítás megbukik.

mockImplementation ​

ts
function mockImplementation(fn: T): MockInstance<T>;

Elfogad egy függvényt, amelyet mock implementációként használ. A TypeScript elvárja, hogy az argumentumok és a visszatérési típus megegyezzen az eredeti függvényével.

ts
const mockFn = vi.fn().mockImplementation((apples: number) => apples + 1);
// or: 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 ​

ts
function mockImplementationOnce(fn: T): MockInstance<T>;

Elfogad egy függvényt, amelyet mock implementációként használ. A TypeScript elvárja, hogy az argumentumok és a visszatérési típus megegyezzen az eredeti függvényével. Ez a metódus láncolható, hogy különböző eredményeket adjon több függvényhívás esetén.

ts
const myMockFn = vi
  .fn()
  .mockImplementationOnce(() => true) // 1st call
  .mockImplementationOnce(() => false); // 2nd call

myMockFn(); // 1st call: true
myMockFn(); // 2nd call: false

Amikor a mockolt függvénynek kifogynak az implementációi, meghívja az alapértelmezett implementációt, amelyet a vi.fn(() => defaultValue) vagy a .mockImplementation(() => defaultValue) hívásokkal állítottak be, ha hívták őket:

ts
const myMockFn = vi
  .fn(() => 'default')
  .mockImplementationOnce(() => 'first call')
  .mockImplementationOnce(() => 'second call');

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

withImplementation ​

ts
function withImplementation(fn: T, cb: () => void): MockInstance<T>;
function withImplementation(
  fn: T,
  cb: () => Promise<void>
): Promise<MockInstance<T>>;

Ideiglenesen felülírja az eredeti mock implementációt, amíg a callback fut.

js
const myMockFn = vi.fn(() => 'original');

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

myMockFn(); // 'original'

Használható aszinkron callbackkel. A metódust meg kell várni, hogy utána az eredeti implementációt lehessen használni.

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

  // We await this call since the callback is async
  await myMockFn.withImplementation(
    () => 'temp',
    async () => {
      myMockFn(); // 'temp'
    }
  );

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

Megjegyzendő, hogy ez a metódus elsőbbséget élvez a mockImplementationOnce felett.

mockRejectedValue ​

ts
function mockRejectedValue(value: unknown): MockInstance<T>;

Elfogad egy hibát, amelyet eldob, amikor az aszinkron függvényt meghívják.

ts
const asyncMock = vi.fn().mockRejectedValue(new Error('Async error'));

await asyncMock(); // throws Error<'Async error'>

mockRejectedValueOnce ​

ts
function mockRejectedValueOnce(value: unknown): MockInstance<T>;

Elfogad 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 elutasítja a megadott értéket.

ts
const asyncMock = vi
  .fn()
  .mockResolvedValueOnce('first call')
  .mockRejectedValueOnce(new Error('Async error'));

await asyncMock(); // 'first call'
await asyncMock(); // throws Error<'Async error'>

mockReset ​

ts
function mockReset(): MockInstance<T>;

Ugyanazokat a műveleteket hajtja végre, mint a mockClear, és a belső implementációt egy üres függvényre állítja (amely undefined értéket ad vissza, amikor meghívják). Ez visszaállítja az összes "once" implementációt is. Hasznos a mock teljes visszaállításához az alapértelmezett állapotába.

Ennek a metódusnak minden teszt előtti automatikus hívásához engedélyezd a mockReset beállítást a konfigurációban.

mockRestore ​

ts
function mockRestore(): MockInstance<T>;

Ugyanazokat a műveleteket hajtja végre, mint a mockReset, és visszaállítja a belső implementációt az eredeti függvényre.

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

Ennek a metódusnak minden teszt előtti automatikus hívásához engedélyezd a restoreMocks beállítást a konfigurációban.

mockResolvedValue ​

ts
function mockResolvedValue(value: Awaited<ReturnType<T>>): MockInstance<T>;

Elfogad egy értéket, amelyet felold, amikor az aszinkron függvényt meghívják. A TypeScript csak olyan értékeket fogad el, amelyek megegyeznek az eredeti függvény visszatérési típusával.

ts
const asyncMock = vi.fn().mockResolvedValue(42);

await asyncMock(); // 42

mockResolvedValueOnce ​

ts
function mockResolvedValueOnce(value: Awaited<ReturnType<T>>): MockInstance<T>;

Elfogad egy értéket, amelyet a következő függvényhívás során felold. A TypeScript csak olyan értékeket fogad el, amelyek megegyeznek az eredeti függvény visszatérési típusával. Ha láncolva van, minden egymást követő hívás feloldja a megadott értéket.

ts
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 ​

ts
function mockReturnThis(): MockInstance<T>;

Használd ezt, ha vissza kell adnod a metódus this kontextusát az aktuális implementáció meghívása nélkül. Ez egy rövidítés a következőre:

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

mockReturnValue ​

ts
function mockReturnValue(value: ReturnType<T>): MockInstance<T>;

Elfogad egy értéket, amelyet mindig visszaad, amikor a mock függvényt meghívják. A TypeScript csak olyan értékeket fogad el, amelyek megegyeznek az eredeti függvény visszatérési típusával.

ts
const mock = vi.fn();
mock.mockReturnValue(42);
mock(); // 42
mock.mockReturnValue(43);
mock(); // 43

mockReturnValueOnce ​

ts
function mockReturnValueOnce(value: ReturnType<T>): MockInstance<T>;

Elfogad egy értéket, amelyet mindig visszaad, amikor a mock függvényt meghívják. A TypeScript csak olyan értékeket fogad el, amelyek megegyeznek az eredeti függvény visszatérési típusával.

Amikor a mockolt függvénynek kifogynak az implementációi, meghívja az alapértelmezett implementációt, amelyet a vi.fn(() => defaultValue) vagy a .mockImplementation(() => defaultValue) hívásokkal állítottak be, ha hívták őket:

ts
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 ​

ts
const calls: Parameters<T>[];

Ez egy tömb, amely tartalmazza az összes argumentumot minden hívásra. A tömb egyik eleme az adott hívás argumentumai.

js
const fn = vi.fn();

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

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

mock.lastCall ​

ts
const lastCall: Parameters<T> | undefined;

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

mock.results ​

ts
interface MockResultReturn<T> {
  type: 'return';
  /**
   * The value that was returned from the function.
   * If function returned a Promise, then this will be a resolved value.
   */
  value: T;
}

interface MockResultIncomplete {
  type: 'incomplete';
  value: undefined;
}

interface MockResultThrow {
  type: 'throw';
  /**
   * An error that was thrown during function execution.
   */
  value: any;
}

type MockResult<T> =
  | MockResultReturn<T>
  | MockResultThrow
  | MockResultIncomplete;

const results: MockResult<ReturnType<T>>[];

Ez egy tömb, amely tartalmazza az összes értéket, amelyet a függvény visszaadott vagy dobott. A tömb egyik eleme egy objektum, amelynek type és value tulajdonságai vannak. Elérhető típusok:

  • 'return' - a függvény visszatért hiba nélkül.
  • 'throw' - a függvény hibát dobott.

A value tulajdonság tartalmazza a visszatérített értéket vagy a dobott hibát. Ha a függvény Promise-t visszaadott, akkor a result mindig 'return' lesz, még akkor is, ha a promise elutasításra került.

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.settledResults ​

ts
interface MockSettledResultFulfilled<T> {
  type: 'fulfilled';
  value: T;
}

interface MockSettledResultRejected {
  type: 'rejected';
  value: any;
}

export type MockSettledResult<T> =
  | MockSettledResultFulfilled<T>
  | MockSettledResultRejected;

const settledResults: MockSettledResult<Awaited<ReturnType<T>>>[];

Egy tömb, amely tartalmazza az összes értéket, amelyet a függvény feloldott vagy elutasított.

Ez a tömb üres lesz, ha a függvény soha nem oldódott fel vagy nem utasították el (azaz a promise soha nem settle-ödött).

js
const fn = vi.fn().mockResolvedValueOnce('result');

const result = fn();

fn.mock.settledResults === [];

await result;

fn.mock.settledResults ===
  [
    {
      type: 'fulfilled',
      value: 'result',
    },
  ];

mock.invocationCallOrder ​

ts
const invocationCallOrder: number[];

Ez a tulajdonság visszaadja a mock függvény végrehajtásának sorrendjét. Ez egy számokból álló tömb, 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.contexts ​

ts
const contexts: ThisParameterType<T>[];

Ez a tulajdonság egy tömb, amely tartalmazza a this értékeket, amelyeket a mock függvény minden hívása során használtak.

js
const fn = vi.fn();
const context = {};

fn.apply(context);
fn.call(context);

fn.mock.contexts[0] === context;
fn.mock.contexts[1] === context;

mock.instances ​

ts
const instances: ReturnType<T>[];

Ez a tulajdonság egy tömb, amely tartalmazza az összes példányt, amelyet akkor hoztak létre, amikor a mockot a new kulcsszóval hívták meg. Megjegyzendő, hogy ez a függvény tényleges kontextusa (this), nem pedig a konstruktor visszatérési értéke.

WARNING

Ha a mockot new MyClass()-szal példányosították, akkor a mock.instances egy tömb lesz egy értékkel:

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

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

Ha visszatérési értéket adsz a konstruktorból, az nem lesz az 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) 2024 Mithril Contributors

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

A MIT licenc alapján kiadva.

Copyright (c) 2024 Mithril Contributors