Skip to content
Vitest 2
Main Navigation KılavuzAPIYapılandırmaTarayıcı Moduİleri
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

Node API

Test Çalıştırıcısı

Görev Meta Verileri

Raporlayıcıları Genişletme

Özel Havuz

Bu sayfada

Raporlayıcıları Genişletme ​

Özel raporlayıcılarınızı oluşturmak için vitest/reporters modülünden raporlayıcıları içe aktarabilir ve bunları genişletebilirsiniz.

Yerleşik Raporlayıcıları Genişletme ​

Genellikle, raporlayıcınızı sıfırdan oluşturmanız gerekmez. vitest, genişletebileceğiniz birkaç varsayılan raporlama sınıfıyla birlikte gelir.

ts
import { DefaultReporter } from 'vitest/reporters';

export default class MyDefaultReporter extends DefaultReporter {
  // yapılacak işlemler
}

Elbette, raporlayıcınızı sıfırdan da oluşturabilirsiniz; sadece BaseReporter sınıfını genişletip ihtiyacınız olan yöntemleri uygulamanız yeterlidir.

İşte özel bir raporlayıcı örneği:

ts
// ./custom-reporter.js
import { BaseReporter } from 'vitest/reporters';

export default class CustomReporter extends BaseReporter {
  onCollected() {
    const files = this.ctx.state.getFiles(this.watchFilters);
    this.reportTestSummary(files);
  }
}

Veya Reporter arayüzünü uygulayın:

ts
// ./custom-reporter.js
import { Reporter } from 'vitest/reporters';

export default class CustomReporter implements Reporter {
  onCollected() {
    // bir şeyler yazdırın
  }
}

Daha sonra özel raporlayıcınızı vitest.config.ts dosyasında kullanabilirsiniz:

ts
import { defineConfig } from 'vitest/config';
import CustomReporter from './custom-reporter.js';

export default defineConfig({
  test: {
    reporters: [new CustomReporter()],
  },
});

Raporlanan Görevler ​

WARNING

Bu deneysel bir API'dır. Geriye dönük uyumsuz değişiklikler SemVer'i takip etmeyebilir. Lütfen kullanırken Vitest'in sürümünü sabitleyin.

Bu API'ye vitest.state.getReportedEntity(runnerTask) çağrısı yaparak erişim sağlayabilirsiniz:

ts
import type { Vitest } from 'vitest/node';
import type { RunnerTestFile } from 'vitest';
import type { Reporter, TestModule } from 'vitest/reporters';

class MyReporter implements Reporter {
  ctx!: Vitest;

  onInit(ctx: Vitest) {
    this.ctx = ctx;
  }

  onFinished(files: RunnerTestFile[]) {
    for (const fileTask of files) {
      // eski görev uygulamasının "module" yerine "file" kullandığına dikkat edin
      const testModule = this.ctx.state.getReportedEntity(
        fileTask
      ) as TestModule;
      for (const task of testModule.children) {
        //                          ^?
        console.log('finished', task.type, task.fullName);
      }
    }
  }
}

Bu API'yi Vitest 2.1'de stabilize etmeyi planlıyoruz.

TestCase ​

TestCase, tek bir testi temsil eder.

ts
declare class TestCase {
  readonly type = 'test' | 'custom';
  /**
   * Görev örneği.
   * @experimental Genel görev API'si deneyseldir ve semver'i takip etmez.
   */
  readonly task: RunnerTestCase | RunnerCustomCase;
  /**
   * Testle ilişkili proje.
   */
  readonly project: TestProject;
  /**
   * Testin tanımlandığı test modülüne doğrudan başvuru.
   */
  readonly module: TestModule;
  /**
   * Testin adı.
   */
  readonly name: string;
  /**
   * Tüm üst süitler dahil olmak üzere testin tam adı, '>' ile ayrılmış.
   */
  readonly fullName: string;
  /**
   * Benzersiz tanımlayıcı.
   * Bu kimlik deterministiktir ve birden çok çalıştırmada aynı test için aynı olacaktır.
   * Kimlik, proje adına, modül kimliğine ve test konumuna dayanır.
   */
  readonly id: string;
  /**
   * Testin tanımlandığı modüldeki konum.
   * Konumlar yalnızca `includeTaskLocation` yapılandırmada etkinleştirilmişse toplanır.
   */
  readonly location: { line: number; column: number } | undefined;
  /**
   * Üst süit. Test doğrudan modül içinde çağrıldıysa, üst modülün kendisi olacaktır.
   */
  readonly parent: TestSuite | TestModule;
  /**
   * Testin başlatıldığı seçenekler.
   */
  readonly options: TaskOptions;
  /**
   * Testin, süiti başarısız etmediğini kontrol eder.
   * Test henüz bitmediyse veya atlandıysa, `true` döndürür.
   */
  ok(): boolean;
  /**
   * Yürütülmesi sırasında teste eklenen özel meta veriler.
   */
  meta(): TaskMeta;
  /**
   * Test sonuçları. Test henüz bitmediyse veya yeni toplandıysa `undefined` olacaktır.
   */
  result(): TestResult | undefined;
  /**
   * Test hakkında süre, bellek kullanımı vb. gibi faydalı bilgiler.
   */
  diagnostic(): TestDiagnostic | undefined;
}

export type TestResult =
  | TestResultPassed
  | TestResultFailed
  | TestResultSkipped;

export interface TestResultPassed {
  /**
   * Test başarıyla geçti.
   */
  state: 'passed';
  /**
   * Test yürütülmesi sırasında atılan hatalar.
   *
   * **Not**: Test başarıyla yeniden denendiyse, hatalar yine de rapor edilecektir.
   */
  errors: TestError[] | undefined;
}

export interface TestResultFailed {
  /**
   * Test başarısız oldu.
   */
  state: 'failed';
  /**
   * Test yürütülmesi sırasında atılan hatalar.
   */
  errors: TestError[];
}

export interface TestResultSkipped {
  /**
   * Test `only`, `skip` veya `todo` bayrağıyla atlandı.
   * Hangisinin kullanıldığını `mode` seçeneğinde görebilirsiniz.
   */
  state: 'skipped';
  /**
   * Atlanan testlerin hatası yoktur.
   */
  errors: undefined;
}

export interface TestDiagnostic {
  /**
   * Testin süresi `slowTestThreshold` değerini aşıyorsa.
   */
  slow: boolean;
  /**
   * Test tarafından kullanılan bellek miktarı (bayt cinsinden).
   * Bu değer, yalnızca test `logHeapUsage` bayrağı etkinleştirilerek çalıştırıldıysa kullanılabilir.
   */
  heap: number | undefined;
  /**
   * Testin yürütülmesi için geçen süre (ms cinsinden).
   */
  duration: number;
  /**
   * Testin başladığı zaman (ms cinsinden).
   */
  startTime: number;
  /**
   * Testin yeniden deneme sayısı.
   */
  retryCount: number;
  /**
   * Testin `repeats` seçeneğiyle yapılandırıldığı gibi tekrar sayısı.
   * Bu değer, test tekrar sırasında başarısız olursa ve `retry` yapılandırılmamışsa daha düşük olabilir.
   */
  repeatCount: number;
  /**
   * Test ikinci denemede geçtiyse.
   */
  flaky: boolean;
}

TestSuite ​

TestSuite, testleri ve diğer süitleri içeren tek bir süiti temsil eder.

ts
declare class TestSuite {
  readonly type = 'suite';
  /**
   * Görev örneği.
   * @experimental Genel görev API'si deneyseldir ve semver'i takip etmez.
   */
  readonly task: RunnerTestSuite;
  /**
   * Testle ilişkili proje.
   */
  readonly project: TestProject;
  /**
   * Süitin tanımlandığı test modülüne doğrudan başvuru.
   */
  readonly module: TestModule;
  /**
   * Süitin adı.
   */
  readonly name: string;
  /**
   * Tüm üst süitler dahil olmak üzere süitin tam adı, '>' ile ayrılmış.
   */
  readonly fullName: string;
  /**
   * Benzersiz tanımlayıcı.
   * Bu kimlik deterministiktir ve birden çok çalıştırmada aynı test için aynı olacaktır.
   * Kimlik, proje adına, modül kimliğine ve test konumuna dayanır.
   */
  readonly id: string;
  /**
   * Süitin tanımlandığı modüldeki konum.
   * Konumlar yalnızca `includeTaskLocation` yapılandırmada etkinleştirilmişse toplanır.
   */
  readonly location: { line: number; column: number } | undefined;
  /**
   * Bu süitin parçası olan süit ve test koleksiyonu.
   */
  readonly children: TaskCollection;
  /**
   * Süitin başlatıldığı seçenekler.
   */
  readonly options: TaskOptions;
}

TestModule ​

TestModule, süitleri ve testleri içeren tek bir dosyayı temsil eder.

ts
declare class TestModule extends SuiteImplementation {
  readonly type = 'module';
  /**
   * Görev örneği.
   * @experimental Genel görev API'si deneyseldir ve semver'i takip etmez.
   */
  readonly task: RunnerTestFile;
  /**
   * Bu modülün parçası olan süit ve test koleksiyonu.
   */
  readonly children: TestCollection;
  /**
   * Bu genellikle mutlak bir Unix dosya yoludur.
   * Dosya diskte değilse sanal bir kimlik olabilir.
   * Bu değer Vite'nin `ModuleGraph` kimliğine karşılık gelir.
   */
  readonly moduleId: string;
  /**
   * Modül hakkında süre, bellek kullanımı vb. gibi faydalı bilgiler.
   * Modül henüz yürütülmediyse, tüm teşhis değerleri `0` döndürür.
   */
  diagnostic(): ModuleDiagnostic;
}

export interface ModuleDiagnostic {
  /**
   * Bir ortamı içe aktarmak ve başlatmak için geçen süre.
   */
  environmentSetupDuration: number;
  /**
   * Vitest'in test donanımını (çalıştırıcı, sahte nesneler vb.) kurması için geçen süre.
   */
  prepareDuration: number;
  /**
   * Test modülünü içe aktarmak için geçen süre.
   * Bu, modüldeki her şeyi içe aktarmayı ve süit geri çağırmalarını yürütmeyi içerir.
   */
  collectDuration: number;
  /**
   * Kurulum modülünü içe aktarmak için geçen süre.
   */
  setupDuration: number;
  /**
   * Modüldeki tüm testlerin ve kancaların birikmiş süresi.
   */
  duration: number;
}

TestCollection ​

TestCollection, süit ve test koleksiyonunu temsil eder. Ayrıca kendi üzerinde yineleme yapmak için faydalı yöntemler sağlar.

ts
declare class TestCollection {
  /**
   * Dizide belirli bir dizindeki testi veya süiti döndürür.
   */
  at(index: number): TestCase | TestSuite | undefined;
  /**
   * Koleksiyondaki test ve süit sayısı.
   */
  size: number;
  /**
   * Daha kolay manipülasyon için koleksiyonu dizi biçiminde döndürür.
   */
  array(): (TestCase | TestSuite)[];
  /**
   * Bu koleksiyonun ve alt öğelerinin parçası olan tüm süitleri filtreler.
   */
  allSuites(): IterableIterator<TestSuite>;
  /**
   * Bu koleksiyonun ve alt öğelerinin parçası olan tüm testleri filtreler.
   */
  allTests(state?: TestResult['state'] | 'running'): IterableIterator<TestCase>;
  /**
   * Yalnızca bu koleksiyonun parçası olan testleri filtreler.
   */
  tests(state?: TestResult['state'] | 'running'): IterableIterator<TestCase>;
  /**
   * Yalnızca bu koleksiyonun parçası olan süitleri filtreler.
   */
  suites(): IterableIterator<TestSuite>;
  [Symbol.iterator](): IterableIterator<TestSuite | TestCase>;
}

Örneğin, bir modül içindeki tüm testler üzerinde testModule.children.allTests() çağrısı yaparak yineleme yapabilirsiniz:

ts
function onFileCollected(testModule: TestModule): void {
  console.log('collecting tests in', testModule.moduleId);

  // modüldeki tüm testler ve süitler üzerinde yineleme yapın
  for (const task of testModule.children.allTests()) {
    console.log('collected', task.type, task.fullName);
  }
}

TestProject ​

TestProject, modülle ilişkili bir projedir. Bu modül içindeki her test ve süit aynı projeye başvuracaktır.

Proje, yapılandırmayı veya sağlanan bağlamı almak için kullanışlıdır.

ts
declare class TestProject {
  /**
   * Genel vitest örneği.
   * @experimental Genel Vitest API'si deneyseldir ve semver'i takip etmez.
   */
  readonly vitest: Vitest;
  /**
   * Bu test projesinin ilişkili olduğu çalışma alanı projesi.
   * @experimental Genel Vitest API'si deneyseldir ve semver'i takip etmez.
   */
  readonly workspaceProject: WorkspaceProject;
  /**
   * Vite'nin geliştirme sunucusu örneği. Her çalışma alanı projesinin kendi sunucusu vardır.
   */
  readonly vite: ViteDevServer;
  /**
   * Çözümlenmiş proje yapılandırması.
   */
  readonly config: ResolvedProjectConfig;
  /**
   * Çözümlenmiş genel yapılandırma. Çalışma alanı projesi yoksa, bu `config` ile aynı olacaktır.
   */
  readonly globalConfig: ResolvedConfig;
  /**
   * Serileştirilmiş proje yapılandırması. Bu, testlerin aldığı yapılandırmadır.
   */
  get serializedConfig(): SerializedConfig;
  /**
   * Projenin adı veya ayarlanmamışsa boş bir dize.
   */
  name(): string;
  /**
   * Projeye sağlanan özel bağlam.
   */
  context(): ProvidedContext;
  /**
   * Projeye özel serileştirilebilir bir bağlam sağlayın. Bu bağlam, testler çalıştığında kullanılabilir olacaktır.
   */
  provide<T extends keyof ProvidedContext & string>(
    key: T,
    value: ProvidedContext[T]
  ): void;
}

Dışa Aktarılan Raporlayıcılar ​

vitest, hazır olarak kullanabileceğiniz birkaç yerleşik raporlayıcı ile birlikte gelir.

Yerleşik raporlayıcılar: ​

  1. BasicReporter
  2. DefaultReporter
  3. DotReporter
  4. JsonReporter
  5. VerboseReporter
  6. TapReporter
  7. JUnitReporter
  8. TapFlatReporter
  9. HangingProcessReporter

Temel Abstract raporlayıcılar: ​

  1. BaseReporter

Arayüz raporlayıcıları: ​

  1. Reporter
Pager
Önceki sayfaGörev Meta Verileri
Sonraki sayfaÖzel Havuz

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

Copyright (c) 2024 Mithril Contributors

https://v2.vitest.dev/advanced/reporters

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

Copyright (c) 2024 Mithril Contributors