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

API

Node API

Gelişmiş API

Vitest API

Test Projesi

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

Eklenti API'si

Çalıştırıcı API'si

Raporlayıcılar

Görev Meta Verileri

Kılavuz

Testleri Çalıştırma

Raporlayıcıları Genişletme

Özel Havuz

Vitest'i Yapılandırma

Test API Referansları

Bu sayfada

Çalıştırıcı API'si ​

WARNING

Bu gelişmiş bir API'dir. Eğer sadece testleri çalıştırmak istiyorsanız, bu API'ye ihtiyacınız olmayabilir. Öncelikle kütüphane yazarları tarafından kullanılır.

Yapılandırma dosyanızdaki runner seçeneğiyle özel test çalıştırıcınızın yolunu belirtebilirsiniz. Bu dosya, aşağıdaki yöntemleri uygulayan bir sınıf kurucusunu varsayılan olarak dışa aktarmalıdır:

ts
export interface VitestRunner {
  /**
   * Testler toplanmadan ve çalıştırılmadan önce çağrılan ilk yöntemdir.
   */
  onBeforeCollect?: (paths: string[]) => unknown;
  /**
   * Testler toplandıktan ve "onBeforeRun" çağrılmadan önce çağrılır.
   */
  onCollected?: (files: File[]) => unknown;

  /**
   * Test çalıştırıcısının sonraki test çalıştırmalarını iptal etmesi gerektiğinde çağrılır.
   * Çalıştırıcı bu yöntemi dinlemeli ve çağrıldığında, "onBeforeRunSuite" ve "onBeforeRunTask" içinde testleri ve süitleri atlanmış olarak işaretlemelidir.
   */
  onCancel?: (reason: CancelReason) => unknown;

  /**
   * Tek bir testi çalıştırmadan önce çağrılır. Henüz bir "result" değeri yoktur.
   */
  onBeforeRunTask?: (test: TaskPopulated) => unknown;
  /**
   * Test fonksiyonunu çalıştırmadan önce çağrılır. Zaten "state" ve "startTime" değerlerini içeren bir "result"a sahiptir.
   */
  onBeforeTryTask?: (
    test: TaskPopulated,
    options: { retry: number; repeats: number }
  ) => unknown;
  /**
   * Sonuç ve durum ayarlandıktan sonra çağrılır.
   */
  onAfterRunTask?: (test: TaskPopulated) => unknown;
  /**
   * Test fonksiyonu çalıştırıldıktan hemen sonra çağrılır. Henüz yeni bir duruma sahip değildir. Test fonksiyonu bir hata fırlatırsa çağrılmaz.
   */
  onAfterTryTask?: (
    test: TaskPopulated,
    options: { retry: number; repeats: number }
  ) => unknown;

  /**
   * Tek bir süiti çalıştırmadan önce çağrılır. Henüz bir "result" değeri yoktur.
   */
  onBeforeRunSuite?: (suite: Suite) => unknown;
  /**
   * Tek bir süiti çalıştırdıktan sonra çağrılır. Durum ve sonuç değerlerine sahiptir.
   */
  onAfterRunSuite?: (suite: Suite) => unknown;

  /**
   * Tanımlanmışsa, Vitest'in olağan süit bölümleme ve işleme mekanizması yerine çağrılır.
   * "before" ve "after" kancaları göz ardı edilmeyecektir.
   */
  runSuite?: (suite: Suite) => Promise<void>;
  /**
   * Tanımlanmışsa, Vitest'in olağan işleme mekanizması yerine çağrılır. Kendi özel test fonksiyonunuz varsa kullanışlıdır.
   * "before" ve "after" kancaları göz ardı edilmeyecektir.
   */
  runTask?: (test: TaskPopulated) => Promise<void>;

  /**
   * Bir görev güncellendiğinde çağrılır. Bir raporlayıcıdaki "onTaskUpdate" ile aynı işlevi görür, ancak bu, testlerle aynı iş parçacığında çalışır.
   */
  onTaskUpdate?: (
    task: [string, TaskResult | undefined, TaskMeta | undefined][]
  ) => Promise<void>;

  /**
   * Toplanan yollardaki tüm testleri çalıştırmadan önce çağrılır.
   */
  onBeforeRunFiles?: (files: File[]) => unknown;
  /**
   * Toplanan yollardaki tüm testleri çalıştırdıktan hemen sonra çağrılır.
   */
  onAfterRunFiles?: (files: File[]) => unknown;
  /**
   * Bir test için yeni bir bağlam tanımlandığında bu yöntem çağrılır. Bağlama özel özellikler eklemek istediğinizde kullanışlıdır.
   * Yalnızca bir çalıştırıcı ile özel bir bağlam tanımlamak istiyorsanız, bunun yerine "setupFiles" içinde "beforeAll" kullanmayı düşünebilirsiniz.
   */
  extendTaskContext?: (context: TestContext) => TestContext;
  /**
   * Belirli dosyalar içe aktarıldığında çağrılır. İki durumda çağrılabilir: testleri toplamak için ve kurulum dosyalarını içe aktarmak için.
   */
  importFile: (filepath: string, source: VitestRunnerImportSource) => unknown;
  /**
   * `test.extend` `{ injected: true }` ile kullanıldığında, çalıştırıcının değeri almaya çalıştığı zaman çağrılan fonksiyondur.
   */
  injectValue?: (key: string) => unknown;
  /**
   * Herkese açık yapılandırma ayarları.
   */
  config: VitestRunnerConfig;
  /**
   * Mevcut havuzun adı. Sunucu tarafında yığın izlemenin nasıl çıkarıldığını etkileyebilir.
   */
  pool?: string;
}

Bu sınıfı başlatırken, Vitest yapılandırmasını iletir; bunu bir config özelliği olarak göstermelisiniz:

ts
import type { RunnerTestFile } from 'vitest';
import type { VitestRunner, VitestRunnerConfig } from 'vitest/suite';
import { VitestTestRunner } from 'vitest/runners';

class CustomRunner extends VitestTestRunner implements VitestRunner {
  public config: VitestRunnerConfig;

  constructor(config: VitestRunnerConfig) {
    this.config = config;
  }

  onAfterRunFiles(files: RunnerTestFile[]) {
    console.log('finished running', files);
  }
}

export default CustomRunner;

WARNING

Vitest ayrıca bir ViteNodeRunner örneğini __vitest_executor özelliği olarak enjekte eder. Bunu importFile yönteminde dosyaları işlemek için kullanabilirsiniz (bu, TestRunner ve BenchmarkRunner'ın varsayılan davranışıdır).

ViteNodeRunner, test dosyalarını Vite dostu bir ortamda içe aktarmak için kullanılan executeId yöntemini sunar. Yani, içe aktarmaları çözümleyecek ve dosya içeriğini çalışma zamanında Node'un anlayabileceği şekilde dönüştürecektir:

ts
export default class Runner {
  async importFile(filepath: string) {
    await this.__vitest_executor.executeId(filepath);
  }
}

WARNING

Özel bir çalıştırıcınız yoksa veya runTask yöntemini tanımlamadıysanız, Vitest görevi otomatik olarak çalıştırmaya çalışacaktır. setFn ile bir fonksiyon eklemediyseniz, işlem başarısız olacaktır.

TIP

Anlık görüntü desteği ve diğer bazı özellikler çalıştırıcıya bağlıdır. Bu özellikleri kaybetmek istemiyorsanız, çalıştırıcınızı vitest/runners'dan içe aktarılan VitestTestRunner'dan genişletebilirsiniz. Ayrıca, kıyaslama işlevselliğini genişletmek istiyorsanız BenchmarkNodeRunner'ı da sunar.

Görevler ​

WARNING

"Çalıştırıcı Görevleri API'si" deneyseldir ve öncelikli olarak yalnızca test çalışma zamanında kullanılmalıdır. Vitest ayrıca, ana iş parçacığında (örneğin, raporlayıcı içinde) çalışırken tercih edilmesi gereken "Raporlanan Görevler API'si"'ni de sunar.

Ekip şu anda "Çalıştırıcı Görevleri"nin gelecekte "Raporlanan Görevler" ile değiştirilip değiştirilmeyeceğini tartışmaktadır.

Süitler ve testler dahili olarak tasks olarak adlandırılır. Vitest çalıştırıcısı, herhangi bir testi toplamadan önce bir File görevi başlatır; bu, birkaç ek özelliğe sahip bir Suite üst kümesidir. Her görevde ( File dahil) bir file özelliği olarak mevcuttur.

ts
interface File extends Suite {
  /**
   * Dosyanın ait olduğu havuzun adı.
   * @default 'forks'
   */
  pool?: string;
  /**
   * Dosyanın UNIX formatındaki yolu.
   */
  filepath: string;
  /**
   * Dosyanın ait olduğu test projesinin adı.
   */
  projectName: string | undefined;
  /**
   * Dosyadaki tüm testleri toplamak için geçen süre.
   * Bu süre, tüm dosya bağımlılıklarının içe aktarılmasını da içerir.
   */
  collectDuration?: number;
  /**
   * Kurulum dosyasının içe aktarılması için geçen süre.
   */
  setupDuration?: number;
}

Her süitin, toplama aşamasında doldurulan bir tasks özelliği bulunur. Görev ağacını yukarıdan aşağıya doğru dolaşmak için kullanışlıdır.

ts
interface Suite extends TaskBase {
  type: 'suite';
  /**
   * Dosya görevi. Dosyanın kök görevidir.
   */
  file: File;
  /**
   * Süitin parçası olan görevlerin bir dizisidir.
   */
  tasks: Task[];
}

Her görevin, içinde bulunduğu süiti referans alan bir suite özelliği bulunur. test veya describe en üst düzeyde başlatılırsa, bir suite özelliğine sahip olmayacaklardır ( file'a eşit olmayacaktır!). File da asla bir suite özelliğine sahip değildir. Görevleri aşağıdan yukarıya doğru dolaşmak için kullanışlıdır.

ts
interface Test<ExtraContext = object> extends TaskBase {
  type: 'test';
  /**
   * Test fonksiyonuna iletilecek test bağlamıdır.
   */
  context: TestContext & ExtraContext;
  /**
   * Dosya görevi. Dosyanın kök görevidir.
   */
  file: File;
  /**
   * Görevin `context.skip()` çağrısı ile atlanıp atlanmadığı.
   */
  pending?: boolean;
  /**
   * Görevin başarısız olması durumunda başarılı sayılıp sayılmayacağı. Görev başarısız olursa, başarılı olarak işaretlenecektir.
   */
  fails?: boolean;
  /**
   * Testi bitirmeden önce beklemek için vaatleri (eşzamansız beklentilerden gelenleri) saklayın.
   */
  promises?: Promise<any>[];
}

Her görevin bir result alanı olabilir. Süitler, bu alana yalnızca bir süit geri çağırmasında veya beforeAll/afterAll geri çağırmalarında fırlatılan bir hata, testleri toplamalarını engellediği takdirde sahip olabilirler. Testler, geri çağırmaları çağrıldıktan sonra her zaman bu alana sahiptir; state ve errors alanları ise sonuca bağlı olarak mevcuttur. beforeEach veya afterEach geri çağırmalarında bir hata fırlatılırsa, fırlatılan hata task.result.errors içinde mevcut olacaktır.

ts
export interface TaskResult {
  /**
   * Görevin durumu. Toplama sırasında `task.mode` değerini miras alır.
   * Görev tamamlandığında, durumu `pass` veya `fail` olarak değişecektir.
   * - **pass**: görev başarıyla çalıştı
   * - **fail**: görev başarısız oldu
   */
  state: TaskState;
  /**
   * Görev yürütme sırasında meydana gelen hatalar. `expect.soft()` birden çok kez başarısız olursa,
   * birden fazla hata oluşması mümkündür.
   */
  errors?: ErrorWithDiff[];
  /**
   * Görevin çalışması için geçen süre (milisaniye cinsinden).
   */
  duration?: number;
  /**
   * Görevin başlangıç zamanı (milisaniye cinsinden).
   */
  startTime?: number;
  /**
   * Görev tamamlandıktan sonraki yığın boyutu (bayt cinsinden).
   * Yalnızca `logHeapUsage` seçeneği ayarlanmışsa ve `process.memoryUsage` tanımlanmışsa kullanılabilir.
   */
  heap?: number;
  /**
   * Bu görevle ilgili kancaların durumu. Raporlama sırasında kullanışlıdır.
   */
  hooks?: Partial<
    Record<'afterAll' | 'beforeAll' | 'beforeEach' | 'afterEach', TaskState>
  >;
  /**
   * Görevin kaç kez yeniden denendiği. Görev yalnızca başarısız olması ve
   * `retry` seçeneğinin ayarlanmış olması durumunda yeniden denenir.
   */
  retryCount?: number;
  /**
   * Görevin kaç kez tekrarlandığı. Görev yalnızca `repeats` seçeneği
   * ayarlanmışsa tekrarlanır. Bu sayı `retryCount` değerini de içerir.
   */
  repeatCount?: number;
}

Görev Fonksiyonunuz ​

Vitest, kendi test metodunuzu oluşturmak için createTaskCollector yardımcı programını sunar. Bir testle aynı şekilde davranır, ancak toplama sırasında özel bir yöntem çağırır.

Bir görev, bir süitin parçası olan bir nesnedir. Mevcut süite suite.task yöntemiyle otomatik olarak eklenir:

js
import { createTaskCollector, getCurrentSuite } from 'vitest/suite';

export { afterAll, beforeAll, describe } from 'vitest';

// Bu fonksiyon toplama aşamasında çağrılacaktır:
// Burada fonksiyon işleyicisini çağırmayın, onu süit görevlerine ekleyin
// "getCurrentSuite().task()" yöntemi aracılığıyla.
// Not: createTaskCollector, "todo"/"each"/... için destek sağlar.
export const myCustomTask = createTaskCollector(function (name, fn, timeout) {
  getCurrentSuite().task(name, {
    ...this, // böylece "todo"/"skip"/... gibi özellikler doğru şekilde izlenir
    meta: {
      customPropertyToDifferentiateTask: true,
    },
    handler: fn,
    timeout,
  });
});
js
import { afterAll, beforeAll, describe, myCustomTask } from './custom.js';
import { gardener } from './gardener.js';

describe('bahçenin bakımı', () => {
  beforeAll(() => {
    gardener.putWorkingClothes();
  });

  myCustomTask('çimleri temizle', () => {
    gardener.weedTheGrass();
  });
  myCustomTask.todo('çimleri biçmek', () => {
    gardener.mowerTheLawn();
  });
  myCustomTask('çiçekleri sula', () => {
    gardener.waterFlowers();
  });

  afterAll(() => {
    gardener.goHome();
  });
});
bash
vitest ./garden/tasks.test.js
Pager
Önceki sayfaEklenti API'si
Sonraki sayfaRaporlayıcılar

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/runner

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

Copyright (c) 2021-Present Vitest Team