Raporlayıcılar
Vitest, test çıktılarını çeşitli formatlarda görüntülemek için yerleşik raporlayıcılar sunar ve özel raporlayıcı kullanımına da olanak tanır. Farklı raporlayıcıları --reporter komut satırı seçeneğiyle veya yapılandırma dosyanızda bir reporters özelliği ekleyerek belirleyebilirsiniz. Herhangi bir raporlayıcı belirtilmediğinde, Vitest aşağıda açıklanan default raporlayıcıyı kullanır.
Komut satırı aracılığıyla raporlayıcıları kullanma:
npx vitest --reporter=verbosevitest.config.ts aracılığıyla raporlayıcıları kullanma:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
reporters: ['verbose'],
},
});Bazı raporlayıcılar, kendilerine ek seçenekler geçirilerek özelleştirilebilir. Raporlayıcıya özel seçenekler aşağıdaki bölümlerde açıklanmıştır.
export default defineConfig({
test: {
reporters: ['default', ['junit', { suiteName: 'UI tests' }]],
},
});Raporlayıcı Çıktısı
Varsayılan olarak, Vitest'in raporlayıcıları çıktılarını terminale yazdırır. json, html veya junit raporlayıcılarını kullanırken, testlerinizin çıktısını bir dosyaya yazmak için Vite yapılandırma dosyanıza veya CLI aracılığıyla bir outputFile yapılandırma seçeneği ekleyebilirsiniz.
npx vitest --reporter=json --outputFile=./test-output.jsonexport default defineConfig({
test: {
reporters: ['json'],
outputFile: './test-output.json',
},
});Raporlayıcıları Birleştirme
Test sonuçlarınızı farklı formatlarda yazdırmak amacıyla aynı anda birden fazla raporlayıcı kullanabilirsiniz. Örneğin:
npx vitest --reporter=json --reporter=defaultexport default defineConfig({
test: {
reporters: ['json', 'default'],
outputFile: './test-output.json',
},
});Yukarıdaki örnek, test sonuçlarını hem varsayılan stilde terminale yazdıracak hem de belirlenen çıktı dosyasına JSON olarak kaydedecektir.
Birden fazla raporlayıcı kullanırken, aşağıdaki gibi birden fazla çıktı dosyası belirlemek de mümkündür:
export default defineConfig({
test: {
reporters: ['junit', 'json', 'verbose'],
outputFile: {
junit: './junit-report.xml',
json: './json-report.json',
},
},
});Bu örnek, ayrı JSON ve XML raporları oluşturacak ve terminale ayrıntılı bir rapor yazdıracaktır.
Yerleşik Raporlayıcılar
Varsayılan Raporlayıcı
Varsayılan olarak (yani, hiçbir raporlayıcı belirtilmediğinde), Vitest çalışan testlerin özetini ve durumlarını altta gösterir. Bir test grubu geçtiğinde, durumu özetin üstünde raporlanır.
Raporlayıcıyı yapılandırarak özeti devre dışı bırakmanız mümkündür:
export default defineConfig({
test: {
reporters: [['default', { summary: false }]],
},
});Devam eden testler için örnek çıktı aşağıdadır:
✓ test/example-1.test.ts (5 tests | 1 skipped) 306ms
✓ test/example-2.test.ts (5 tests | 1 skipped) 307ms
❯ test/example-3.test.ts 3/5
❯ test/example-4.test.ts 1/5
Test Files 2 passed (4)
Tests 10 passed | 3 skipped (65)
Start at 11:01:36
Duration 2.00sTestler bittikten sonraki son çıktı:
✓ test/example-1.test.ts (5 tests | 1 skipped) 306ms
✓ test/example-2.test.ts (5 tests | 1 skipped) 307ms
✓ test/example-3.test.ts (5 tests | 1 skipped) 307ms
✓ test/example-4.test.ts (5 tests | 1 skipped) 307ms
Test Files 4 passed (4)
Tests 16 passed | 4 skipped (20)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Temel Raporlayıcı
basic raporlayıcı, özet olmadan default raporlayıcıya eşdeğerdir.
npx vitest --reporter=basicexport default defineConfig({
test: {
reporters: ['basic'],
},
});Temel raporlayıcı kullanılarak örnek çıktı:
✓ __tests__/file1.test.ts (2) 725ms
✓ __tests__/file2.test.ts (2) 746ms
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Ayrıntılı Raporlayıcı
Ayrıntılı raporlayıcı, default raporlayıcı ile aynıdır, ancak test grubu bittikten sonra her bir testi de görüntüler. Ayrıca slowTestThreshold değerinden daha uzun süren şu anda çalışan testleri de görüntüler. default raporlayıcıya benzer şekilde, raporlayıcıyı yapılandırarak özeti devre dışı bırakabilirsiniz.
npx vitest --reporter=verboseexport default defineConfig({
test: {
reporters: [['verbose', { summary: false }]],
},
});Varsayılan slowTestThreshold: 300 ile devam eden testler için örnek çıktı:
✓ __tests__/example-1.test.ts (2) 725ms
✓ first test file (2) 725ms
✓ 2 + 2 should equal 4
✓ 4 - 2 should equal 2
❯ test/example-2.test.ts 3/5
↳ should run longer than three seconds 1.57s
❯ test/example-3.test.ts 1/5
Test Files 2 passed (4)
Tests 10 passed | 3 skipped (65)
Start at 11:01:36
Duration 2.00sGeçen bir test grubu için son terminal çıktısı örneği:
✓ __tests__/file1.test.ts (2) 725ms
✓ first test file (2) 725ms
✓ 2 + 2 should equal 4
✓ 4 - 2 should equal 2
✓ __tests__/file2.test.ts (2) 746ms
✓ second test file (2) 746ms
✓ 1 + 1 should equal 2
✓ 2 - 1 should equal 1
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Nokta İşaretli Raporlayıcı
Her tamamlanan test için tek bir nokta yazdırarak minimum çıktı sağlar ve yine de çalışan tüm testleri gösterir. Ayrıntılar yalnızca başarısız testler için ve test grubu için basic raporlayıcı özetiyle birlikte sağlanır.
npx vitest --reporter=dotexport default defineConfig({
test: {
reporters: ['dot'],
},
});Geçen bir test grubu için örnek terminal çıktısı:
....
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)JUnit Raporlayıcı
Test sonuçlarının JUnit XML formatında bir raporunu çıkarır. outputFile yapılandırma seçeneği kullanılarak terminale yazdırılabilir veya bir XML dosyasına yazılabilir.
npx vitest --reporter=junitexport default defineConfig({
test: {
reporters: ['junit'],
},
});Bir JUnit XML raporu örneği:
<?xml version="1.0" encoding="UTF-8" ?>
<testsuites name="vitest tests" tests="2" failures="1" errors="0" time="0.503">
<testsuite name="__tests__/test-file-1.test.ts" timestamp="2023-10-19T17:41:58.580Z" hostname="My-Computer.local" tests="2" failures="1" errors="0" skipped="0" time="0.013">
<testcase classname="__tests__/test-file-1.test.ts" name="first test file > 2 + 2 should equal 4" time="0.01">
<failure message="expected 5 to be 4 // Object.is equality" type="AssertionError">
AssertionError: expected 5 to be 4 // Object.is equality
❯ __tests__/test-file-1.test.ts:20:28
</failure>
</testcase>
<testcase classname="__tests__/test-file-1.test.ts" name="first test file > 4 - 2 should equal 2" time="0">
</testcase>
</testsuite>
</testsuites>Çıktı XML'i iç içe testsuites ve testcase etiketleri içerir. Bunlar ayrıca raporlayıcı seçenekleri suiteName ve classnameTemplate aracılığıyla özelleştirilebilir. classnameTemplate bir şablon dizesi veya bir fonksiyon olabilir.
classnameTemplate seçeneği için desteklenen yer tutucular şunlardır:
- filename
- filepath
export default defineConfig({
test: {
reporters: [
[
'junit',
{
suiteName: 'özel süit adı',
classnameTemplate: 'dosya adı:{filename} - dosya yolu:{filepath}',
},
],
],
},
});JSON Raporlayıcı
Jest'in --json seçeneğiyle uyumlu bir JSON formatında test sonuçlarının bir raporunu oluşturur. outputFile yapılandırma seçeneği kullanılarak terminale yazdırılabilir veya bir dosyaya yazılabilir.
npx vitest --reporter=jsonexport default defineConfig({
test: {
reporters: ['json'],
},
});Bir JSON raporu örneği:
{
"numTotalTestSuites": 4,
"numPassedTestSuites": 2,
"numFailedTestSuites": 1,
"numPendingTestSuites": 1,
"numTotalTests": 4,
"numPassedTests": 1,
"numFailedTests": 1,
"numPendingTests": 1,
"numTodoTests": 1,
"startTime": 1697737019307,
"success": false,
"testResults": [
{
"assertionResults": [
{
"ancestorTitles": ["", "ilk test dosyası"],
"fullName": " ilk test dosyası 2 + 2, 4'e eşit olmalı",
"status": "failed",
"title": "2 + 2, 4'e eşit olmalı",
"duration": 9,
"failureMessages": ["beklenen 5, 4 olmalı // Object.is eşitliği"],
"location": {
"line": 20,
"column": 28
},
"meta": {}
}
],
"startTime": 1697737019787,
"endTime": 1697737019797,
"status": "failed",
"message": "",
"name": "/root-directory/__tests__/test-file-1.test.ts"
}
],
"coverageMap": {}
}INFO
Vitest 3'ten beri, JSON raporlayıcı, kapsama etkinleştirilirse coverageMap içinde kapsama bilgisi içerir.
HTML Raporlayıcı
Etkileşimli bir GUI aracılığıyla test sonuçlarını görüntülemek için bir HTML dosyası oluşturur. Dosya oluşturulduktan sonra, Vitest yerel bir geliştirme sunucusu çalışır durumda tutacak ve raporu bir tarayıcıda görüntülemek için bir bağlantı sağlayacaktır.
Çıktı dosyası outputFile yapılandırma seçeneği kullanılarak belirtilebilir. outputFile seçeneği sağlanmazsa, yeni bir HTML dosyası oluşturulacaktır.
npx vitest --reporter=htmlexport default defineConfig({
test: {
reporters: ['html'],
},
});TIP
Bu raporlayıcı, @vitest/ui paketinin kurulu olmasını gerektirir.
TAP Raporlayıcı
Test Anything Protocol (TAP) formatında bir rapor çıkarır.
npx vitest --reporter=tapexport default defineConfig({
test: {
reporters: ['tap'],
},
});Bir TAP raporu örneği:
TAP version 13
1..1
not ok 1 - __tests__/test-file-1.test.ts # time=14.00ms {
1..1
not ok 1 - first test file # time=13.00ms {
1..2
not ok 1 - 2 + 2 should equal 4 # time=11.00ms
---
error:
name: "AssertionError"
message: "expected 5 to be 4 // Object.is equality"
at: "/root-directory/__tests__/test-file-1.test.ts:20:28"
actual: "5"
expected: "4"
...
ok 2 - 4 - 2 should equal 2 # time=1.00ms
}
}TAP Düz Raporlayıcı
Bir TAP düz raporu çıkarır. tap raporlayıcısı gibi, test sonuçları TAP standartlarına uygun olarak biçimlendirilir, ancak test grupları iç içe bir hiyerarşi yerine düz bir liste olarak biçimlendirilir.
npx vitest --reporter=tap-flatexport default defineConfig({
test: {
reporters: ['tap-flat'],
},
});Bir TAP düz raporu örneği:
TAP version 13
1..2
not ok 1 - __tests__/test-file-1.test.ts > first test file > 2 + 2 should equal 4 # time=11.00ms
---
error:
name: "AssertionError"
message: "expected 5 to be 4 // Object.is equality"
at: "/root-directory/__tests__/test-file-1.test.ts:20:28"
actual: "5"
expected: "4"
...
ok 2 - __tests__/test-file-1.test.ts > first test file > 4 - 2 should equal 2 # time=0.00msAskıda Kalan Süreç Raporlayıcı
Vitest'in güvenli bir şekilde çıkmasını engelleyen askıda kalan süreçlerin bir listesini görüntüler. hanging-process raporlayıcısı test sonuçlarını kendisi görüntülemez, ancak testler çalışırken süreçleri izlemek için başka bir raporlayıcıyla birlikte kullanılabilir. Bu raporlayıcıyı kullanmak kaynak yoğun olabilir, bu nedenle genellikle Vitest'in süreci sürekli olarak sonlandıramadığı durumlarda hata ayıklama amaçları için ayrılmalıdır.
npx vitest --reporter=hanging-processexport default defineConfig({
test: {
reporters: ['hanging-process'],
},
});Github Actions Raporlayıcı
Test hataları için açıklamalar sağlamak üzere iş akışı komutlarını çıktı olarak verir. Bu raporlayıcı, process.env.GITHUB_ACTIONS === 'true' olduğunda bir default raporlayıcı ile otomatik olarak etkinleştirilir.
Varsayılan olmayan raporlayıcıları yapılandırırsanız, github-actions'ı açıkça eklemeniz gerekir.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS ? ['dot', 'github-actions'] : ['dot'],
},
});GitHub'ın açıklama komut formatında yazdırılan dosya yollarını onWritePath seçeneğini kullanarak özelleştirebilirsiniz. Bu, Vitest'i Docker gibi kapsayıcılı bir ortamda çalıştırırken, dosya yollarının GitHub Actions ortamındaki yollarla eşleşmeyebileceği durumlarda kullanışlıdır.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS
? [
'default',
[
'github-actions',
{
onWritePath(path) {
return path.replace(
/^\/app\//,
`${process.env.GITHUB_WORKSPACE}/`
);
},
},
],
]
: ['default'],
},
});Blob Raporlayıcı
Test sonuçlarını makinede depolar, böylece daha sonra --merge-reports komutu kullanılarak birleştirilebilirler. Varsayılan olarak, tüm sonuçları .vitest-reports klasöründe depolar, ancak --outputFile veya --outputFile.blob bayraklarıyla geçersiz kılınabilir.
npx vitest --reporter=blob --outputFile=reports/blob-1.jsonVitest'i farklı makinelerde --shard bayrağıyla çalıştırıyorsanız bu raporlayıcıyı kullanmanızı öneririz. Tüm blob raporları, CI pipeline'ınızın sonunda --merge-reports komutu kullanılarak herhangi bir rapora birleştirilebilir:
npx vitest --merge-reports=reports --reporter=json --reporter=defaultTIP
Hem --reporter=blob hem de --merge-reports izleme modunda çalışmaz.
Özel Raporlayıcılar
Raporlayıcılar ayarında paket adlarını belirterek NPM'den yüklenen üçüncü taraf özel raporlayıcıları kullanabilirsiniz:
npx vitest --reporter=some-published-vitest-reporterexport default defineConfig({
test: {
reporters: ['some-published-vitest-reporter'],
},
});Ek olarak, kendi özel raporlayıcılarınızı tanımlayabilir ve dosya yollarını belirterek kullanabilirsiniz:
npx vitest --reporter=./path/to/reporter.tsÖzel raporlayıcılar Reporter arayüzünü uygulamalıdır.