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:
onInitonTestRunStartonTestRunEnd
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+Ctuş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:
beforeAllafterAllbeforeEachafterEach
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:
beforeAllafterAllbeforeEachafterEach
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.