Raporlayıcılar
WARNING
Bu ileri düzey bir API'dir. Yalnızca yerleşik raporlayıcıları yapılandırmak istiyorsanız, "Raporlayıcılar" kılavuzunu okuyun.
Vitest'in kendine özgü bir test çalıştırma yaşam döngüsü vardır. Bu döngü, aşağıdaki raporlayıcı yöntemleriyle temsil edilir:
onInit
onTestRunStart
onTestRunEnd
Tek bir modül içindeki testler ve süitler, atlanmadıkları sürece sırayla raporlanır. Atlanan tüm testler, süit/modülün sonunda raporlanır.
Test modülleri paralel olarak çalışabildiğinden, Vitest'in bunları da paralel olarak raporlayacağını unutmayın.
Bu rehber, desteklenen tüm raporlayıcı metotlarını listeler. Ancak, kendi raporlayıcınızı sıfırdan oluşturmak yerine, var olan bir raporlayıcıyı genişletebileceğinizi unutmayın:
import { BaseReporter } from 'vitest/reporters';
export default class CustomReporter extends BaseReporter {
onTestRunEnd(testModules, errors) {
console.log(testModules.length, 'tests finished running');
super.onTestRunEnd(testModules, errors);
}
}
onInit
function onInit(vitest: Vitest): Awaitable<void>;
Bu yöntem, Vitest başlatıldığında veya başladığında, ancak testler filtrelenmeden önce çağrılır.
INFO
Dahili olarak bu metot, vitest.start
, vitest.init
veya vitest.mergeReports
içinde çağrılır. Programlama API'si kullanıyorsanız, örneğin vitest.runTestSpecifications
çağırmadan önce ihtiyaçlarınıza göre bunlardan birini çağırdığınızdan emin olun. Dahili CLI her zaman metotları doğru sırada çalıştıracaktır.
vitest
örneğine test durumlarından, süitlerden ve test modüllerinden bir project
özelliği aracılığıyla da erişebileceğinizi, ancak bu metot içinde vitest
'e bir referans saklamanın da yararlı olabileceğini unutmayın.
Örnek
import type { Reporter, TestSpecification, Vitest } from 'vitest/node';
class MyReporter implements Reporter {
private vitest!: Vitest;
onInit(vitest: Vitest) {
this.vitest = vitest;
}
onTestRunStart(specifications: TestSpecification[]) {
console.log(
specifications.length,
'test files will run in',
this.vitest.config.root
);
}
}
export default new MyReporter();
onBrowserInit deneysel
function onBrowserInit(project: TestProject): Awaitable<void>;
Bu metot, tarayıcı örneği başlatıldığında çağrılır. Tarayıcının başlatıldığı projenin bir örneğini alır. Bu yöntem çağrıldığında project.browser
her zaman tanımlı olacaktır.
onTestRunStart
function onTestRunStart(specifications: TestSpecification[]): Awaitable<void>;
Bu yöntem, yeni bir test çalıştırması başladığında çağrılır. Çalıştırılması planlanan test spesifikasyonları dizisini alır. Bu dizi salt okunurdur ve sadece bilgi amaçlıdır.
Vitest çalıştırılacak herhangi bir test dosyası bulamazsa, bu olay boş bir dizi ile çağrılır ve ardından hemen onTestRunEnd
çağrılır.
Örnek
import type { Reporter, TestSpecification } from 'vitest/node';
class MyReporter implements Reporter {
onTestRunStart(specifications: TestSpecification[]) {
console.log(specifications.length, 'test files will run');
}
}
export default new MyReporter();
KULLANIMDAN KALDIRMA BİLDİRİMİ
Bu yöntem Vitest 3'te eklendi ve artık kullanımdan kaldırılan onPathsCollected
ve onSpecsCollected
'in yerini aldı.
onTestRunEnd
function onTestRunEnd(
testModules: ReadonlyArray<TestModule>,
unhandledErrors: ReadonlyArray<SerializedError>,
reason: TestRunEndReason
): Awaitable<void>;
Bu yöntem, tüm testler çalışmayı bitirdikten ve kapsam, etkinleştirildiyse tüm raporları birleştirdikten sonra çağrılır. Kapsam bilgilerini onCoverage
kancasında alabileceğinizi unutmayın.
Salt okunur bir test modülleri listesi alır. Durumu ve varsa hataları raporlamak için testModule.children
özelliği aracılığıyla üzerinde yineleme yapabilirsiniz.
İkinci argüman, Vitest'in herhangi bir teste atfedemediği işlenmemiş hataların salt okunur bir listesidir. Bunlar, bir eklentideki bir hata nedeniyle test çalıştırmasının dışında veya test çalıştırması içinde, beklenmeyen bir fonksiyonun yan etkisi olarak (örneğin, test çalışmayı bitirdikten sonra bir hata fırlatan bir zaman aşımı) meydana gelebilir.
Üçüncü argüman, test çalıştırmasının neden bittiğini belirtir:
passed
: test çalıştırması normal şekilde tamamlandı ve hata yokfailed
: test çalıştırmasında en az bir hata var (toplama sırasında bir sözdizimi hatası veya test yürütme sırasında gerçek bir hata nedeniyle)interrupted
: testvitest.cancelCurrentRun
çağrısı veya terminaldeCtrl+C
tuşuna basılarak kesildi (bu durumda hala başarısız testlerin olabileceğini unutmayın)
Vitest çalıştırılacak herhangi bir test dosyası bulamazsa, bu olay boş modül ve hata dizileriyle çağrılır ve durum config.passWithNoTests
değerine bağlı olacaktır.
Örnek
import type {
Reporter,
SerializedError,
TestModule,
TestRunEndReason,
TestSpecification,
} from 'vitest/node';
class MyReporter implements Reporter {
onTestRunEnd(
testModules: ReadonlyArray<TestModule>,
unhandledErrors: ReadonlyArray<SerializedError>,
reason: TestRunEndReason
) {
if (reason === 'passed') {
testModules.forEach(module => console.log(module.moduleId, 'succeeded'));
} else if (reason === 'failed') {
// bunun süitlerdeki olası hataları atlayacağını unutmayın
// bunları testSuite.errors() adresinden alabilirsiniz
for (const testCase of testModules.children.allTests()) {
if (testCase.result().state === 'failed') {
console.log(
testCase.fullName,
'in',
testCase.module.moduleId,
'failed'
);
console.log(testCase.result().errors);
}
}
} else {
console.log('test run was interrupted, skipping report');
}
}
}
export default new MyReporter();
KULLANIMDAN KALDIRMA BİLDİRİMİ
Bu yöntem Vitest 3'te eklendi ve artık kullanımdan kaldırılan onFinished
'in yerini aldı.
onCoverage
function onCoverage(coverage: unknown): Awaitable<void>;
Bu kanca, kapsam sonuçları işlendikten sonra çağrılır. Kapsam sağlayıcısının raporlayıcıları bu kancadan sonra çağrılır. coverage
'ın türleri coverage.provider
'a bağlıdır. Vitest'in varsayılan yerleşik sağlayıcıları için türleri istanbul-lib-coverage
paketinden içe aktarabilirsiniz:
import type { CoverageMap } from 'istanbul-lib-coverage';
declare function onCoverage(coverage: CoverageMap): Awaitable<void>;
Vitest herhangi bir kapsam gerçekleştirmediyse, bu kanca çağrılmaz.
onTestModuleQueued
function onTestModuleQueued(testModule: TestModule): Awaitable<void>;
Bu yöntem, Vitest kurulum dosyasını ve test modülünün kendisini içe aktarmadan hemen önce çağrılır. Bu, testModule
'ün henüz children
içermeyeceği, ancak onu çalıştırılacak bir sonraki test olarak raporlamaya başlayabileceğiniz anlamına gelir.
onTestModuleCollected
function onTestModuleCollected(testModule: TestModule): Awaitable<void>;
Bu yöntem, dosya içindeki tüm testler toplandığında çağrılır, yani testModule.children
koleksiyonu doldurulur, ancak testlerin henüz herhangi bir sonucu yoktur.
onTestModuleStart
function onTestModuleStart(testModule: TestModule): Awaitable<void>;
Bu yöntem, onTestModuleCollected
hemen sonra çağrılır. Vitest toplama modunda çalışmadığı sürece (vitest.collect()
veya CLI'da vitest collect
), bu durumda çalıştırılacak test olmadığı için hiç çağrılmaz.
onTestModuleEnd
function onTestModuleEnd(testModule: TestModule): Awaitable<void>;
Bu yöntem, modüldeki her test çalışmayı bitirdiğinde çağrılır. Bu, testModule.children
içindeki her testin pending
'e eşit olmayan bir test.result()
'e sahip olacağı anlamına gelir.
onHookStart
function onHookStart(context: ReportedHookContext): Awaitable<void>;
Bu yöntem, aşağıdaki kancalardan herhangi biri çalışmaya başladığında çağrılır:
beforeAll
afterAll
beforeEach
afterEach
beforeAll
veya afterAll
başlatılırsa, entity
ya TestSuite
ya da TestModule
olacaktır.
beforeEach
veya afterEach
başlatılırsa, entity
her zaman TestCase
olacaktır.
WARNING
onHookStart
yöntemi, kanca test çalıştırması sırasında çalışmadıysa çağrılmaz.
onHookEnd
function onHookEnd(context: ReportedHookContext): Awaitable<void>;
Bu yöntem, aşağıdaki kancalardan herhangi biri çalışmayı bitirdiğinde çağrılır:
beforeAll
afterAll
beforeEach
afterEach
beforeAll
veya afterAll
bittiyse, entity
ya TestSuite
ya da TestModule
olacaktır.
beforeEach
veya afterEach
bittiyse, entity
her zaman TestCase
olacaktır.
WARNING
onHookEnd
yöntemi, kanca test çalıştırması sırasında çalışmadıysa çağrılmaz.
onTestSuiteReady
function onTestSuiteReady(testSuite: TestSuite): Awaitable<void>;
Bu yöntem, süit testlerini çalıştırmaya başlamadan önce çağrılır. Bu yöntem, süit atlandıysa da çağrılır.
Dosyada herhangi bir süit yoksa, bu yöntem çağrılmaz. Bu kullanım durumunu kapsamak amacıyla onTestModuleStart
kullanmayı düşünün.
onTestSuiteResult
function onTestSuiteResult(testSuite: TestSuite): Awaitable<void>;
Bu yöntem, süit testleri çalıştırmayı bitirdikten sonra çağrılır. Bu yöntem, süit atlandıysa da çağrılır.
Dosyada herhangi bir süit yoksa, bu yöntem çağrılmaz. Bu kullanım durumunu kapsamak amacıyla onTestModuleEnd
kullanmayı düşünün.
onTestCaseReady
function onTestCaseReady(testCase: TestCase): Awaitable<void>;
Bu yöntem, test çalışmaya başlamadan veya atlanmadan önce çağrılır. beforeEach
ve afterEach
kancalarının testin bir parçası olarak değerlendirildiğini unutmayın, çünkü sonucu etkileyebilirler.
WARNING
onTestCaseReady
çağrıldığında testCase.result()
'nin passed
veya failed
durumunda olabileceğini unutmayın. Bu, test çok hızlı çalışıyorsa ve hem onTestCaseReady
hem de onTestCaseResult
aynı mikro görevde çalışacak şekilde planlandıysa meydana gelebilir.
onTestCaseResult
function onTestCaseResult(testCase: TestCase): Awaitable<void>;
Bu yöntem, test çalışması sona erdiğinde veya atlandığında çağrılır. Varsa, afterEach
kancası bittikten sonra çağrılacağını unutmayın.
Bu noktada, testCase.result()
beklemede olmayan bir duruma sahip olacaktır.
onTestAnnotate 3.2.0+
function onTestAnnotate(
testCase: TestCase,
annotation: TestAnnotation
): Awaitable<void>;
onTestAnnotate
kancası context.annotate
yöntemiyle ilişkilidir. annotate
çağrıldığında, Vitest onu serileştirir ve aynı eki raporlayıcının onunla etkileşime girebileceği ana iş parçacığına gönderir.
Yol belirtilirse, Vitest onu ayrı bir dizinde saklar (attachmentsDir
tarafından yapılandırılır) ve path
özelliğini ona başvuracak şekilde değiştirir.