Skip to content
Vitest 2
Main Navigation LeitfadenAPIKonfigurationBrowser-ModusFortgeschritten
2.1.9
1.6.1
0.34.6

Deutsch

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

Deutsch

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

Aussehen

Sidebar Navigation

Test API Referenz

Mock-Funktionen

Vi

expect

expectTypeOf

assert

assertType

Auf dieser Seite

Mock-Funktionen ​

Sie können eine Mock-Funktion erstellen, um deren Ausführung mit der Methode vi.fn zu verfolgen. Wenn Sie eine Methode eines bereits existierenden Objekts verfolgen möchten, können Sie die Methode vi.spyOn verwenden:

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;

Sie sollten Mock-Assertions (z. B. toHaveBeenCalled) in Verbindung mit expect verwenden, um das Verhalten des Mocks zu überprüfen. Diese API-Referenz beschreibt die verfügbaren Eigenschaften und Methoden zur Manipulation des Mock-Verhaltens.

TIP

Die benutzerdefinierte Implementierung der Funktion in den folgenden Typen ist mit einem generischen <T> gekennzeichnet.

getMockImplementation ​

ts
function getMockImplementation(): T | undefined;

Gibt die aktuelle Implementierung des Mocks zurück, falls vorhanden.

Wurde der Mock mit vi.fn erstellt, wird die bereitgestellte Funktion als Mock-Implementierung verwendet.

Wenn der Mock mit vi.spyOn erstellt wurde, wird undefined zurückgegeben, es sei denn, eine benutzerdefinierte Implementierung wurde bereitgestellt.

getMockName ​

ts
function getMockName(): string;

Verwenden Sie dies, um den Namen zurückzugeben, der dem Mock mit der Methode .mockName(name) zugewiesen wurde. Standardmäßig wird vi.fn() zurückgegeben.

mockClear ​

ts
function mockClear(): MockInstance<T>;

Löscht alle Informationen zu jedem Aufruf. Nach dem Aufruf kehren alle Eigenschaften auf .mock in ihren ursprünglichen Zustand zurück. Diese Methode setzt die Implementierungen nicht zurück. Sie ist nützlich, um Mocks zwischen verschiedenen Assertions zu bereinigen.

Um diese Methode vor jedem Test automatisch aufzurufen, aktivieren Sie die Einstellung clearMocks in der Konfiguration.

mockName ​

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

Setzt den internen Namen des Mocks. Dies ist nützlich, um den Mock zu identifizieren, wenn eine Assertion fehlschlägt.

mockImplementation ​

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

Akzeptiert eine Funktion, die als Implementierung des Mocks verwendet werden soll. TypeScript erwartet, dass die Argumente und der Rückgabetyp mit denen der ursprünglichen Funktion übereinstimmen.

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

Akzeptiert eine Funktion, die als Mock-Implementierung verwendet werden soll. TypeScript erwartet, dass die Argumente und der Rückgabetyp mit denen der ursprünglichen Funktion übereinstimmen. Diese Methode kann verkettet werden, um unterschiedliche Ergebnisse für mehrere Funktionsaufrufe zu erzielen.

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

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

Wenn der gemockten Funktion die Implementierungen ausgehen, wird die Standardimplementierung aufgerufen, die mit vi.fn(() => defaultValue) oder .mockImplementation(() => defaultValue) festgelegt wurde, falls diese zuvor aufgerufen wurden:

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

Überschreibt die ursprüngliche Mock-Implementierung vorübergehend, während der Callback ausgeführt wird.

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

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

myMockFn(); // 'original'

Kann mit einem asynchronen Callback verwendet werden. Die Methode muss awaited werden, um die ursprüngliche Implementierung danach wieder verwenden zu können.

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

Beachten Sie, dass diese Methode Vorrang vor mockImplementationOnce hat.

mockRejectedValue ​

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

Akzeptiert einen Fehler, der zurückgewiesen wird, wenn die asynchrone Funktion aufgerufen wird.

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

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

mockRejectedValueOnce ​

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

Akzeptiert einen Wert, der beim nächsten Aufruf der Funktion zurückgewiesen wird. Bei Verkettung wird bei jedem weiteren Aufruf der angegebene Wert zurückgewiesen.

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

Führt die gleichen Aktionen wie mockClear aus und setzt die interne Implementierung auf eine leere Funktion (die undefined zurückgibt, wenn sie aufgerufen wird). Dies setzt auch alle "once"-Implementierungen zurück. Es ist nützlich, um einen Mock vollständig auf seinen Standardzustand zurückzusetzen.

Um diese Methode automatisch vor jedem Test aufzurufen, aktivieren Sie die Einstellung mockReset in der Konfiguration.

mockRestore ​

ts
function mockRestore(): MockInstance<T>;

Führt die gleichen Aktionen wie mockReset aus und stellt die interne Implementierung auf die ursprüngliche Funktion wieder her.

Beachten Sie, dass beim Wiederherstellen eines mit vi.fn() erstellten Mocks die Implementierung auf eine leere Funktion zurückgesetzt wird, die undefined zurückgibt. Das Wiederherstellen eines mit vi.fn(impl) erstellten Mocks stellt die Implementierung auf impl wieder her.

Um diese Methode automatisch vor jedem Test aufzurufen, aktivieren Sie die Einstellung restoreMocks in der Konfiguration.

mockResolvedValue ​

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

Akzeptiert einen Wert, der aufgelöst wird, wenn die asynchrone Funktion aufgerufen wird. TypeScript lässt nur Werte zu, die dem Rückgabetyp der ursprünglichen Funktion entsprechen.

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

await asyncMock(); // 42

mockResolvedValueOnce ​

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

Akzeptiert einen Wert, der beim nächsten Funktionsaufruf aufgelöst wird. TypeScript lässt nur Werte zu, die dem Rückgabetyp der ursprünglichen Funktion entsprechen. Bei Verkettung wird bei jedem weiteren Aufruf der angegebene Wert aufgelöst.

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

Verwenden Sie dies, wenn Sie den this-Kontext von der Methode zurückgeben müssen, ohne die tatsächliche Implementierung aufzurufen. Dies ist eine Abkürzung für:

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

mockReturnValue ​

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

Akzeptiert einen Wert, der zurückgegeben wird, wenn die Mock-Funktion aufgerufen wird. TypeScript lässt nur Werte zu, die dem Rückgabetyp der ursprünglichen Funktion entsprechen.

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

mockReturnValueOnce ​

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

Akzeptiert einen Wert, der zurückgegeben wird, wenn die Mock-Funktion aufgerufen wird. TypeScript lässt nur Werte zu, die dem Rückgabetyp der ursprünglichen Funktion entsprechen.

Wenn der gemockten Funktion die Implementierungen ausgehen, wird die Standardimplementierung aufgerufen, die mit vi.fn(() => defaultValue) oder .mockImplementation(() => defaultValue) festgelegt wurde, falls diese zuvor aufgerufen wurden:

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

Dies ist ein Array, das alle Argumente für jeden Aufruf enthält. Jedes Element des Arrays repräsentiert die Argumente eines einzelnen Aufrufs.

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;

Dies enthält die Argumente des letzten Aufrufs. Wenn der Mock nicht aufgerufen wurde, wird undefined zurückgegeben.

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

Dies ist ein Array, das die Ergebnisse aller Funktionsaufrufe enthält. Jedes Element des Arrays ist ein Objekt mit den Eigenschaften type und value. Verfügbare Typen sind:

  • 'return' - Die Funktion wurde erfolgreich beendet und hat einen Wert zurückgegeben.
  • 'throw' - Die Funktion hat einen Fehler geworfen.

Die Eigenschaft value enthält den zurückgegebenen Wert oder den geworfenen Fehler. Wenn die Funktion ein Promise zurückgegeben hat, ist result immer 'return', auch wenn das Promise zurückgewiesen wurde.

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

Ein Array, das die Ergebnisse aller Funktionsaufrufe enthält, nachdem Promises aufgelöst oder zurückgewiesen wurden.

Dieses Array ist leer, wenn die Funktion nie aufgelöst oder zurückgewiesen wurde.

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

Diese Eigenschaft gibt die Reihenfolge der Ausführung der Mock-Funktion zurück. Es ist ein Array von Zahlen, die zwischen allen definierten Mocks geteilt werden.

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

Diese Eigenschaft enthält ein Array der this-Kontexte, die bei jedem Aufruf der Mock-Funktion verwendet wurden.

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

Diese Eigenschaft ist ein Array, das alle Instanzen enthält, die erstellt wurden, als der Mock mit dem Schlüsselwort new aufgerufen wurde. Beachten Sie, dass dies der tatsächliche this-Kontext der Funktion ist, nicht ein Rückgabewert.

WARNING

Wurde der Mock mit new MyClass() instanziiert, ist mock.instances ein Array mit einem Wert:

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

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

Falls der Konstruktor einen Wert zurückgibt, wird dieser nicht im instances-Array, sondern stattdessen in results enthalten sein:

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

Spy.mock.instances[0] !== a;
Spy.mock.results[0] === a;
Pager
Vorherige SeiteTest API Referenz
Nächste SeiteVi

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

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

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors