Skip to content
Vitest 1
Main Navigation KılavuzAPIYapılandırmaİleri
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

İleri

Node API

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

Görev Meta Verileri

Raporlayıcıları Genişletme

Özel Havuz

Bu sayfada

Özel Havuz ​

WARNING

Bu gelişmiş bir API'dir. Sadece testleri çalıştırıyorsanız, buna ihtiyacınız olmayabilir. Öncelikli olarak kütüphane yazarları tarafından kullanılır.

Vitest, testleri havuzlarda çalıştırır. Varsayılan olarak aşağıdaki havuzlar mevcuttur:

  • threads: Testleri node:worker_threads kullanarak çalıştırmak için (yeni bir worker context ile izolasyon sağlanır)
  • forks: Testleri node:child_process kullanarak çalıştırmak için (yeni bir child_process.fork süreci ile izolasyon sağlanır)
  • vmThreads: Testleri node:worker_threads kullanarak çalıştırmak için (ancak izolasyon yeni bir worker context yerine vm modülü ile sağlanır)
  • browser: Testleri tarayıcı sağlayıcıları kullanarak çalıştırmak için
  • typescript: Testler için tür denetimi yapmak için

Bir dosya yolu belirterek kendi havuzunuzu oluşturabilirsiniz:

ts
import { defineConfig } from 'vitest/config';
// ---cut---
export default defineConfig({
  test: {
    // varsayılan olarak her dosyayı özel bir havuzla çalıştırır
    pool: './my-custom-pool.ts',
    // `poolOptions` nesnesi ile seçenekler belirleyebilirsiniz
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
    // ayrıca dosyaların bir alt kümesi için havuz belirleyebilirsiniz
    poolMatchGlobs: [['**/*.custom.test.ts', './my-custom-pool.ts']],
  },
});

API ​

pool seçeneğinde belirtilen dosya, ilk parametresi Vitest arayüzü olan bir fonksiyonu dışa aktarmalıdır (bu fonksiyon async olabilir). Bu fonksiyon, ProcessPool arayüzüne uyan bir nesne döndürmelidir:

ts
import { ProcessPool, WorkspaceProject } from 'vitest/node';

export interface ProcessPool {
  name: string;
  runTests: (
    files: [project: WorkspaceProject, testFile: string][],
    invalidates?: string[]
  ) => Promise<void>;
  close?: () => Promise<void>;
}

Fonksiyon yalnızca bir kez çağrılır; sunucu yapılandırması güncellenmediği sürece. Genellikle testler için gerekli her şeyi bu fonksiyonda başlatmak ve runTests çağrıldığında bunları yeniden kullanmak iyi bir uygulamadır.

Vitest, yeni testlerin çalıştırılması gerektiğinde runTests fonksiyonunu çağırır. files dizisi boşsa çağırmaz. İlk argüman, çokuzlardan oluşan bir dizidir. Dosyalar, runTests çağrılmadan önce sequencer kullanılarak sıralanır. Aynı dosyaya iki kez sahip olmak mümkündür, ancak bu durum olası değildir. Ancak her zaman farklı bir projeye sahip olacaktır - bu, vitest.workspace.ts yapılandırması aracılığıyla sağlanır.

Vitest, bir çalıştırmayı bitirmeden önce runTests fonksiyonunun tamamlanmasını bekleyecektir. Yani, yalnızca runTests çözüldükten sonra onFinished olayını tetikleyecektir.

Özel bir havuz kullanıyorsanız, test dosyalarını ve sonuçlarını kendiniz sağlamanız gerekecektir - bunun için vitest.state referans alabilirsiniz (en önemlileri collectFiles ve updateTasks). Vitest bunu yapmak için @vitest/runner paketinden startTests fonksiyonunu kullanır.

Farklı süreçler arasında iletişim kurmak için, vitest/node'dan createMethodsRPC kullanarak yöntemler nesnesi oluşturabilir ve tercih ettiğiniz herhangi bir iletişim biçimini kullanabilirsiniz. Örneğin, birpc ile WebSockets kullanmak için aşağıdaki gibi bir kod yazabilirsiniz:

ts
import { createBirpc } from 'birpc';
import { parse, stringify } from 'flatted';
import { WorkspaceProject, createMethodsRPC } from 'vitest/node';

function createRpc(project: WorkspaceProject, wss: WebSocketServer) {
  return createBirpc(createMethodsRPC(project), {
    post: msg => wss.send(msg),
    on: fn => wss.on('message', fn),
    serialize: stringify,
    deserialize: parse,
  });
}

Her testin toplandığından emin olmak için, ctx.state.collectFiles fonksiyonunu çağırır ve Vitest raporlayıcılarına bildirirsiniz:

ts
async function runTests(project: WorkspaceProject, tests: string[]) {
  // ... testleri çalıştırma, "files" ve "tasks" içine koyma
  const methods = createMethodsRPC(project);
  await methods.onCollected(files);
  // çoğu raporlayıcı, sonuçların "onTaskUpdate" içinde güncellenmesine güvenir
  await methods.onTaskUpdate(tasks);
}

pool/custom-pool.ts içinde basit bir örneğe göz atabilirsiniz.

Pager
Önceki sayfaRaporlayıcıları Genişletme

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

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/advanced/pool

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

Copyright (c) 2024 Mithril Contributors