Skip to content
Vitest 2
Main Navigation PrůvodceAPIKonfiguraceRežim prohlížečePokročilý
2.1.9
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

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

Mock funkce

Vi

expect

expectTypeOf

assert

assertType

Na této stránce

Mockovací funkce ​

Mockovací funkci můžete vytvořit pro sledování jejích volání pomocí metody vi.fn. Pokud chcete sledovat metodu na již vytvořeném objektu, můžete použít metodu vi.spyOn:

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;

Pro ověření výsledku mocku byste měli použít tvrzení pro mocky (např. toHaveBeenCalled) na expect. Tato API reference popisuje dostupné vlastnosti a metody pro manipulaci s chováním mocků.

TIP

Vlastní implementace funkce v níže uvedených typech je označena generickým typem <T>.

getMockImplementation ​

ts
function getMockImplementation(): T | undefined;

Vrátí aktuální implementaci mocku, pokud nějaká existuje.

Pokud byl mock vytvořen pomocí metody vi.fn, použije se poskytnutá metoda jako implementace mocku.

Pokud byl mock vytvořen pomocí metody vi.spyOn, vrátí undefined, pokud není poskytnuta žádná vlastní implementace.

getMockName ​

ts
function getMockName(): string;

Použijte tuto metodu k vrácení názvu přiřazeného mocku pomocí .mockName(name). Ve výchozím nastavení vrátí vi.fn() jako název.

mockClear ​

ts
function mockClear(): MockInstance<T>;

Vymaže všechny informace o všech voláních. Po zavolání se všechny vlastnosti na .mock vrátí do svého počátečního stavu. Tato metoda neobnovuje implementace. Je užitečná pro úklid mocků mezi různými tvrzeními.

Pro automatické volání této metody před každým testem povolte nastavení clearMocks v konfiguraci.

mockName ​

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

Nastaví interní název pro mock. To je užitečné pro identifikaci mocku, když dojde k selhání tvrzení.

mockImplementation ​

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

Přijímá funkci, která bude použita jako implementace mocku. TypeScript očekává, že argumenty a návratový typ budou odpovídat těm původním.

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>;

Přijímá funkci, která bude použita jako implementace mocku. TypeScript očekává, že argumenty a návratový typ budou odpovídat původní funkci. Tuto metodu lze řetězit, aby se dosáhlo různých výsledků pro více volání funkce.

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

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

Když mockované funkci dojdou definované implementace, vyvolá výchozí implementaci nastavenou pomocí vi.fn(() => defaultValue) nebo .mockImplementation(() => defaultValue), pokud byly nastaveny:

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>>;

Dočasně přepíše původní implementaci mocku po dobu provádění callbacku.

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

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

myMockFn(); // 'original'

Lze použít s asynchronním callbackem. Metoda musí být očekávána, aby se poté obnovila původní implementace.

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'
});

Všimněte si, že tato metoda má přednost před mockImplementationOnce.

mockRejectedValue ​

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

Přijímá chybu, která bude zamítnuta při volání asynchronní funkce.

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

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

mockRejectedValueOnce ​

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

Přijímá hodnotu, která bude zamítnuta během dalšího volání funkce. Pokud je řetězena, každé následující volání zamítne zadanou hodnotu.

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>;

Provádí stejné akce jako mockClear a nastavuje vnitřní implementaci na prázdnou funkci (která při vyvolání vrací undefined). Tím se také resetují všechny "once" implementace. Je užitečné pro úplné resetování mocku do jeho výchozího stavu.

Pro automatické volání této metody před každým testem povolte nastavení mockReset v konfiguraci.

mockRestore ​

ts
function mockRestore(): MockInstance<T>;

Provádí stejné akce jako mockReset a obnovuje vnitřní implementaci na původní funkci.

Všimněte si, že obnovení mocku vytvořeného pomocí vi.fn() nastaví implementaci na prázdnou funkci, která vrací undefined. Obnovení mocku vytvořeného pomocí vi.fn(impl) obnoví implementaci na impl.

Pro automatické volání této metody před každým testem povolte nastavení restoreMocks v konfiguraci.

mockResolvedValue ​

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

Přijímá hodnotu, která bude splněna při volání asynchronní funkce. TypeScript přijme pouze hodnoty, které odpovídají návratovému typu původní funkce.

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

await asyncMock(); // 42

mockResolvedValueOnce ​

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

Přijímá hodnotu, která bude splněna během dalšího volání funkce. TypeScript přijme pouze hodnoty, které odpovídají návratovému typu původní funkce. Pokud je řetězena, každé následující volání splní zadanou hodnotu.

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>;

Použijte tuto metodu, pokud potřebujete vrátit kontext this z metody bez vyvolání skutečné implementace. Toto je zkratka pro:

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

mockReturnValue ​

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

Přijímá hodnotu, která bude vrácena při každém volání mockovací funkce. TypeScript přijme pouze hodnoty, které odpovídají návratovému typu původní funkce.

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

mockReturnValueOnce ​

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

Přijímá hodnotu, která bude vrácena při každém volání mockovací funkce. TypeScript přijme pouze hodnoty, které odpovídají návratovému typu původní funkce.

Když mockované funkci dojdou implementace, vyvolá výchozí implementaci nastavenou pomocí vi.fn(() => defaultValue) nebo .mockImplementation(() => defaultValue), pokud byly nastaveny:

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>[];

Toto pole obsahuje všechny argumenty pro každé volání. Jedna položka pole obsahuje argumenty tohoto volání.

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;

Zde jsou uloženy argumenty posledního volání. Pokud mock nebyl volán, vrátí undefined.

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>>[];

Toto pole obsahuje všechny hodnoty, které byly vráceny z funkce. Jedna položka pole je objekt s vlastnostmi type a value. Dostupné typy jsou:

  • 'return' - funkce se vrátila bez vyhození chyby.
  • 'throw' - funkce vyhodila hodnotu.

Vlastnost value obsahuje vrácenou hodnotu nebo vyhozenou chybu. Pokud funkce vrátila Promise, pak result bude vždy 'return', i když byl promise zamítnut.

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>>>[];

Pole obsahující všechny hodnoty, které byly splněny nebo zamítnuty z funkce.

Toto pole bude prázdné, pokud funkce nedokončila svůj běh nebo nebyla odmítnuta.

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[];

Tato vlastnost vrací pořadí spuštění mockovací funkce. Je to pole čísel sdílené mezi všemi definovanými mocky.

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>[];

Tato vlastnost je pole hodnot this použitých během každého volání mockovací funkce.

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>[];

Tato vlastnost je pole obsahující všechny instance, které byly vytvořeny, když byl mock volán s klíčovým slovem new. Pozor, jedná se o skutečný kontext (this) funkce, nikoli o návratovou hodnotu.

WARNING

Pokud byl mock instanciován pomocí new MyClass(), pak mock.instances bude pole s jednou hodnotou:

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

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

Pokud vrátíte hodnotu z konstruktoru, nebude v poli instances, ale místo toho uvnitř results:

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

Spy.mock.instances[0] !== a;
Spy.mock.results[0] === a;
Pager
Předchozí stránkaReferenční příručka k Test API
Další stránkaVi

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors

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

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors