Skip to content
Vitest 3
Main Navigation Kılavuz & APIYapılandırmaTarayıcı ModuGelişmiş API
3.2.0
2.1.9
1.6.1
0.34.6

Türkçe

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

Türkçe

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

Görünüm

Sidebar Navigation

Giriş

Neden Vitest

Başlarken

Özellikler

Vitest'i Yapılandırma

API

Test API Referansları

Mock Fonksiyonlar

Vi

expect

expectTypeOf

assert

assertType

Kılavuz

Komut Satırı Arayüzü

Test Filtreleme

Test Projeleri

Raporlayıcılar

Kapsam

Anlık Görüntüler

Mocking

Paralellik

Tür Testleri

Vitest UI

Kaynak İçi Test

Test Ortamı

Test Açıklamaları

Test Ortamı

Eşleştiricileri Genişletme

IDE Entegrasyonları

Hata Ayıklama

Sık Karşılaşılan Hatalar

Geçiş Kılavuzu

Vitest 3.0'a Geçiş

Jest'ten Geçiş

Performans

Test Performansını Profillendirme

Performansı İyileştirme

Tarayıcı Modu

Gelişmiş API

Diğer Test Çalıştırıcılarla Karşılaştırmalar

Bu sayfada

Mock Fonksiyonlar ​

vi.fn metodu ile bir mock fonksiyonu oluşturarak yürütülmesini takip edebilirsiniz. Zaten oluşturulmuş bir nesne üzerindeki bir metodu takip etmek isterseniz, vi.spyOn metodunu kullanabilirsiniz:

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;

Mock sonucunu doğrulamak için expect üzerinde mock doğrulayıcıları (örneğin, toHaveBeenCalled) kullanmalısınız. Bu API referansı, mock davranışını manipüle etmek için mevcut özellikleri ve yöntemleri açıklar.

TIP

Aşağıdaki tiplerdeki özel fonksiyon uygulaması <T> jeneriği ile işaretlenmiştir.

getMockImplementation ​

ts
function getMockImplementation(): T | undefined;

Varsa, mevcut mock uygulamasını döndürür.

Mock vi.fn ile oluşturulduysa, sağlanan metodu mock uygulama olarak kullanacaktır.

Mock vi.spyOn ile oluşturulduysa, özel bir uygulama sağlanmadıkça undefined döndürecektir.

getMockName ​

ts
function getMockName(): string;

.mockName(name) metodu ile mock'a atanan adı döndürmek için kullanın. Varsayılan olarak, vi.fn() döndürecektir.

mockClear ​

ts
function mockClear(): MockInstance<T>;

Her çağrı hakkındaki tüm bilgileri temizler. Çağrıldıktan sonra, .mock üzerindeki tüm özellikler başlangıç durumlarına dönecektir. Bu yöntem mock uygulamalarını sıfırlamaz. Farklı test senaryoları arasında mock'ları temizlemek için kullanışlıdır.

ts
const person = {
  greet: (name: string) => `Hello ${name}`,
};
const spy = vi.spyOn(person, 'greet').mockImplementation(() => 'mocked');
expect(person.greet('Alice')).toBe('mocked');
expect(spy.mock.calls).toEqual([['Alice']]);

// çağrı geçmişini temizle ama mock uygulamayı koru
spy.mockClear();
expect(spy.mock.calls).toEqual([]);
expect(person.greet('Bob')).toBe('mocked');
expect(spy.mock.calls).toEqual([['Bob']]);

Bu metodu her testten önce otomatik olarak çağırmak için, yapılandırmadaki clearMocks ayarını etkinleştirin.

mockName ​

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

Dahili mock adını ayarlar. Bu, bir doğrulama başarısız olduğunda mock'u tanımlamak için kullanışlıdır.

mockImplementation ​

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

Mock uygulama olarak kullanılacak bir fonksiyonu kabul eder. TypeScript, argümanların ve dönüş tipinin orijinal fonksiyonunkilerle eşleşmesini bekler.

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

Mock uygulama olarak kullanılacak bir fonksiyonu kabul eder. TypeScript, argümanların ve dönüş tipinin orijinal fonksiyonunkilerle eşleşmesini bekler. Bu metod, birden fazla fonksiyon çağrısı için farklı sonuçlar üretmek üzere zincirlenebilir.

ts
const myMockFn = vi
  .fn()
  .mockImplementationOnce(() => true) // 1. çağrı
  .mockImplementationOnce(() => false); // 2. çağrı

myMockFn(); // 1. çağrı: true
myMockFn(); // 2. çağrı: false

Mock fonksiyonun tanımlı uygulamaları tükendiğinde, vi.fn(() => defaultValue) veya .mockImplementation(() => defaultValue) ile ayarlanmış varsayılan uygulamayı çağıracaktır:

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

Callback yürütülürken orijinal mock uygulamasını geçici olarak geçersiz kılar.

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

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

myMockFn(); // 'original'

Asenkron bir callback ile kullanılabilir. Metodun daha sonra orijinal uygulamayı kullanmak için beklenmesi gerekir.

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

  // Callback asenkron olduğu için bu çağrıyı bekliyoruz
  await myMockFn.withImplementation(
    () => 'temp',
    async () => {
      myMockFn(); // 'temp'
    }
  );

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

Bu metodun mockImplementationOnce üzerinde önceliğe sahip olduğunu unutmayın.

mockRejectedValue ​

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

Asenkron fonksiyon çağrıldığında reddedilecek bir hatayı kabul eder.

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

await asyncMock(); // Error<'Async error'> hatası fırlatır

mockRejectedValueOnce ​

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

Bir sonraki fonksiyon çağrısı sırasında reddedilecek bir değeri kabul eder. Zincirlenirse, her ardışık çağrı belirtilen değeri reddedecektir.

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

await asyncMock(); // 'first call'
await asyncMock(); // Error<'Async error'> hatası fırlatır

mockReset ​

ts
function mockReset(): MockInstance<T>;

mockClear ne yapıyorsa onu yapar ve iç uygulamayı orijinal fonksiyona sıfırlar. Bu aynı zamanda tüm tek seferlik uygulamaları da sıfırlar.

vi.fn() ile oluşturulmuş bir mock'u sıfırlamanın, uygulamasını undefined döndüren boş bir fonksiyona ayarlayacağını unutmayın. vi.fn(impl) ile oluşturulmuş bir mock'u sıfırlamak, uygulamasını impl'ye geri yükleyecektir.

Bu, bir mock'u orijinal durumuna sıfırlamak istediğinizde kullanışlıdır.

ts
const person = {
  greet: (name: string) => `Hello ${name}`,
};
const spy = vi.spyOn(person, 'greet').mockImplementation(() => 'mocked');
expect(person.greet('Alice')).toBe('mocked');
expect(spy.mock.calls).toEqual([['Alice']]);

// çağrı geçmişini temizle ve uygulamayı sıfırla, ancak metod hala spy'lanıyor
spy.mockReset();
expect(spy.mock.calls).toEqual([]);
expect(person.greet).toBe(spy);
expect(person.greet('Bob')).toBe('Hello Bob');
expect(spy.mock.calls).toEqual([['Bob']]);

Bu metodu her testten önce otomatik olarak çağırmak için, yapılandırmadaki mockReset ayarını etkinleştirin.

mockRestore ​

ts
function mockRestore(): MockInstance<T>;

mockReset ne yapıyorsa onu yapar ve spy'lanmış nesnelerin orijinal tanımlayıcılarını geri yükler.

vi.fn() ile oluşturulmuş bir mock'u geri yüklemenin, uygulamasını undefined döndüren boş bir fonksiyona ayarlayacağını unutmayın. vi.fn(impl) ile oluşturulmuş bir mock'u geri yüklemek, uygulamasını impl'ye geri yükleyecektir.

ts
const person = {
  greet: (name: string) => `Hello ${name}`,
};
const spy = vi.spyOn(person, 'greet').mockImplementation(() => 'mocked');
expect(person.greet('Alice')).toBe('mocked');
expect(spy.mock.calls).toEqual([['Alice']]);

// çağrı geçmişini temizle ve spy'lanmış nesne metodunu geri yükle
spy.mockRestore();
expect(spy.mock.calls).toEqual([]);
expect(person.greet).not.toBe(spy);
expect(person.greet('Bob')).toBe('Hello Bob');
expect(spy.mock.calls).toEqual([]);

Bu metodu her testten önce otomatik olarak çağırmak için, yapılandırmadaki restoreMocks ayarını etkinleştirin.

mockResolvedValue ​

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

Asenkron fonksiyon çağrıldığında çözümlenecek bir değeri kabul eder. TypeScript yalnızca orijinal fonksiyonun dönüş tipiyle eşleşen değerleri kabul edecektir.

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

await asyncMock(); // 42

mockResolvedValueOnce ​

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

Bir sonraki fonksiyon çağrısı sırasında çözümlenecek bir değeri kabul eder. TypeScript yalnızca orijinal fonksiyonun dönüş tipiyle eşleşen değerleri kabul edecektir. Zincirlenirse, her ardışık çağrı belirtilen değeri çözecektir.

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

Gerçek uygulamayı çağırmadan metoddan this bağlamını döndürmeniz gerekiyorsa bunu kullanın. Bu, aşağıdaki gibi kısaltılabilir:

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

mockReturnValue ​

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

Mock fonksiyon her çağrıldığında döndürülecek bir değeri kabul eder. TypeScript yalnızca orijinal fonksiyonun dönüş tipiyle eşleşen değerleri kabul edecektir.

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

mockReturnValueOnce ​

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

Mock fonksiyon her çağrıldığında döndürülecek bir değeri kabul eder. TypeScript yalnızca orijinal fonksiyonun dönüş tipiyle eşleşen değerleri kabul edecektir.

Mock fonksiyonun tanımlı uygulamaları tükendiğinde, vi.fn(() => defaultValue) veya .mockImplementation(() => defaultValue) ile ayarlanmış varsayılan uygulamayı çağıracaktır:

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

Bu, her çağrı için tüm argümanları içeren bir dizidir. Dizinin bir öğesi, o çağrının argümanlarıdır.

js
const fn = vi.fn();

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

fn.mock.calls ===
  [
    ['arg1', 'arg2'], // ilk çağrı
    ['arg3'], // ikinci çağrı
  ];

mock.lastCall ​

ts
const lastCall: Parameters<T> | undefined;

Bu, son çağrının argümanlarını içerir. Mock çağrılmadıysa, undefined döndürecektir.

mock.results ​

ts
interface MockResultReturn<T> {
  type: 'return';
  /**
   * Fonksiyondan döndürülen değer.
   * Fonksiyon bir Promise döndürdüyse, bu çözümlenmiş bir değer olacaktır.
   */
  value: T;
}

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

interface MockResultThrow {
  type: 'throw';
  /**
   * Fonksiyon yürütme sırasında fırlatılan bir hata.
   */
  value: any;
}

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

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

Bu, fonksiyondan dönen tüm değerleri içeren bir dizidir. Dizinin bir öğesi, type ve value özelliklerine sahip bir nesnedir. Mevcut tipler şunlardır:

  • 'return' - fonksiyon hata fırlatmadan döndü.
  • 'throw' - fonksiyon bir değer fırlattı.

value özelliği, döndürülen değeri veya fırlatılan hatayı içerir. Fonksiyon bir Promise döndürdüyse, promise reddedilmiş olsa bile result her zaman 'return' olacaktır.

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

const result = fn(); // 'result' döndürdü

try {
  fn(); // Hata fırlattı
} catch {}

fn.mock.results ===
  [
    // ilk sonuç
    {
      type: 'return',
      value: 'result',
    },
    // son sonuç
    {
      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>>>[];

Fonksiyondan çözümlenen veya reddedilen tüm değerleri içeren bir dizi.

Fonksiyon hiç çözümlenmediyse veya reddedilmediyse bu dizi boş olacaktır.

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

Bu özellik, mock fonksiyonun yürütme sırasını döndürür. Tanımlanmış tüm mock'lar arasında paylaşılan bir sayı dizisidir.

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

Bu özellik, mock fonksiyona yapılan her çağrı sırasında kullanılan this değerlerinin bir dizisidir.

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

Bu özellik, mock new anahtar kelimesiyle çağrıldığında oluşturulan tüm örnekleri içeren bir dizidir. Bunun fonksiyonun gerçek bağlamı (this) olduğunu, dönüş değeri olmadığını unutmayın.

WARNING

Bir mock new MyClass() ile örneklendirilmişse, mock.instances bir değere sahip bir dizi olacaktır:

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

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

Kurucudan bir değer döndürürseniz, bu instances dizisinde değil, results içinde olacaktır:

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

Spy.mock.instances[0] !== a;
Spy.mock.results[0] === a;
Pager
Önceki sayfaTest API Referansları
Sonraki sayfaVi

MIT Lisansı altında yayınlanmıştır.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/api/mock

MIT Lisansı altında yayınlanmıştır.

Copyright (c) 2021-Present Vitest Team