Test Çalıştırıcısı
WARNING
Bu gelişmiş bir API'dir. Sadece testleri çalıştırmak istiyorsanız, buna ihtiyacınız olmayabilir. Genellikle kütüphane geliştiricileri tarafından kullanılır.
Yapılandırma dosyanızdaki runner
seçeneği ile test çalıştırıcınızın yolunu belirtebilirsiniz. Bu dosya, aşağıdaki yöntemleri uygulayan bir sınıf ile varsayılan bir dışa aktarıma sahip olmalıdır:
export interface VitestRunner {
/**
* Testleri toplamadan ve çalıştırmadan önce çağrılan ilk şeydir.
*/
onBeforeCollect?(paths: string[]): unknown;
/**
* Testleri topladıktan ve "onBeforeRun"dan ö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 metodu dinlemeli ve "onBeforeRunSuite" ve
* "onBeforeRunTest" içinde çağrıldığında testleri ve test gruplarını atlanmış olarak işaretlemelidir.
*/
onCancel?(reason: CancelReason): unknown;
/**
* Tek bir testi çalıştırmadan önce çağrılır. Henüz sonuç yoktur.
*/
onBeforeRunTest?(test: Test): unknown;
/**
* Test fonksiyonunu gerçekten çalıştırmadan önce çağrılır. Zaten durum ve başlangıç zamanı ile birlikte sonuç mevcuttur.
*/
onBeforeTryTest?(test: Test, retryCount: number): unknown;
/**
* Sonuç ve durum ayarlandıktan sonra çağrılır.
*/
onAfterRunTest?(test: Test): unknown;
/**
* Test fonksiyonunu çalıştırdıktan hemen sonra çağrılır. Henüz yeni durum yoktur. Test fonksiyonu hata verirse çağrılmaz.
*/
onAfterTryTest?(test: Test, retryCount: number): unknown;
/**
* Tek bir test paketini çalıştırmadan önce çağrılır. Henüz sonuç yoktur.
*/
onBeforeRunSuite?(suite: Suite): unknown;
/**
* Tek bir test paketini çalıştırdıktan sonra çağrılır. Durum ve sonuç mevcuttur.
*/
onAfterRunSuite?(suite: Suite): unknown;
/**
* Tanımlanmışsa, normal Vitest test grubu bölümlemesi ve işlemesi yerine çağrılır.
* "before" ve "after" kancaları dikkate alınacaktır.
*/
runSuite?(suite: Suite): Promise<void>;
/**
* Tanımlanmışsa, normal Vitest işlemesi yerine çağrılır. Özel test fonksiyonunuz varsa kullanışlıdır.
* "before" ve "after" kancaları dikkate alınacaktır.
*/
runTest?(test: Test): Promise<void>;
/**
* Bir görev güncellendiğinde çağrılır. Bir rapordaki onTaskUpdate ile aynıdır; ancak bu, testlerle eş zamanlı olarak çalışır.
*/
onTaskUpdate?(task: [string, TaskResult | undefined][]): Promise<void>;
/**
* Toplanan yollardaki tüm testleri çalıştırmadan önce çağrılır.
*/
onBeforeRun?(files: File[]): unknown;
/**
* Toplanan yollardaki tüm testleri çalıştırdıktan hemen sonra çağrılır.
*/
onAfterRun?(files: File[]): unknown;
/**
* Bir test için yeni bağlam tanımlandığında çağrılır. Bağlama özel nitelikler eklemek isterseniz kullanışlıdır.
* Eğer bir çalıştırıcı ile yalnızca özel bağlam tanımlamak istiyorsanız, bunun yerine "setupFiles" içinde "beforeAll" kullanmayı düşünebilirsiniz.
*/
extendTestContext?(context: TestContext): TestContext;
/**
* Belirli dosyalar içe aktarıldığında çağrılır. İki durumda çağrılabilir: testleri toplarken ve kurulum dosyalarını içe aktarırken.
*/
importFile(filepath: string, source: VitestRunnerImportSource): unknown;
/**
* Herkese açık yapılandırma.
*/
config: VitestRunnerConfig;
}
Bu sınıfı başlatırken, Vitest yapılandırması aktarılır - bunu bir config
özelliği olarak belirtmelisiniz.
WARNING
Vitest ayrıca ViteNodeRunner
örneğini __vitest_executor
özelliği olarak ekler. importFile
metodunda dosyaları işlemek için kullanabilirsiniz (bu, TestRunner
ve BenchmarkRunner
ın varsayılan davranışıdır).
ViteNodeRunner
, test dosyalarını Vite uyumlu bir ortamda içe aktarmak için kullanılan executeId
metodunu sunar. Yani, içe aktarmaları çözümleyip dosya içeriğini çalışma anında dönüştürerek Node'un anlamasını sağlar.
TIP
Anlık görüntü desteği ve diğer bazı özellikler çalıştırıcıya bağlıdır. 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 kullanabilirsiniz.
Görev Fonksiyonunuz
Vitest görev sistemini görevlerinizle genişletebilirsiniz. Bir görev, bir test paketinin parçası olan bir nesnedir. suite.custom
metoduyla otomatik olarak geçerli pakete eklenir:
// ./utils/custom.js
import { getCurrentSuite, setFn } from 'vitest/suite';
export { describe, beforeAll, afterAll } from 'vitest';
// Vitest görevleri toplarken bu fonksiyon çağrılır
export const myCustomTask = function (name, fn) {
const task = getCurrentSuite().custom(name);
task.meta = {
customPropertyToDifferentiateTask: true,
};
setFn(task, fn || (() => {}));
};
// ./garden/tasks.test.js
import {
afterAll,
beforeAll,
describe,
myCustomTask,
} from '../utils/custom.js';
import { gardener } from './gardener.js';
describe('bahçe bakımı', () => {
beforeAll(() => {
gardener.putWorkingClothes();
});
myCustomTask('otları temizle', () => {
gardener.weedTheGrass();
});
myCustomTask('çiçekleri sulamak', () => {
gardener.waterFlowers();
});
afterAll(() => {
gardener.goHome();
});
});
vitest ./garden/tasks.test.js
WARNING
Özel bir çalıştırıcınız yoksa veya runTest
metodunu tanımlamadıysanız, Vitest bir görevi otomatik olarak almaya çalışacaktır. setFn
ile bir fonksiyon eklemediyseniz, bu işlem başarısız olur.
TIP
Özel görev sistemi kancaları ve bağlamları desteklemektedir. Özellik zincirlemesini (örneğin only
, skip
ve özel olanlar) desteklemek isterseniz, vitest/suite
dan createChainable
ı içe aktarabilir ve fonksiyonunuzu onunla sarabilirsiniz. Bunu yapmaya karar verirseniz, custom
fonksiyonunu custom.call(this)
şeklinde çağırmanız gerekir.