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

Kılavuz

Neden Vitest

Başlangıç

Özellikler

Çalışma Alanı

Komut Satırı Arayüzü

Test Filtreleme

Raporlayıcılar

Kapsam

Anlık Görüntü (Snapshot) Testleri

Sahtecilik (Mocking)

Türleri Test Etme

Vitest Arayüzü

Tarayıcı Modu

Kaynak İçi Test

Test Bağlamı

Test Ortamı

Eşleştiricileri Genişletme

IDE Tümleştirmeleri

Hata Ayıklama

Diğer Test Çalıştırıcılarıyla Karşılaştırmalar

Geçiş Rehberi

Yaygın Hatalar

Performansı İyileştirme

API

Test API Başvurusu

Sahte Fonksiyonlar

Vi

expect

expectTypeOf

assert

assertType

Yapılandırma

Vitest Yapılandırma Dosyasını Yönetme

Vitest'in Yapılandırılması

Bu sayfada

Test Bağlamı ​

Playwright Fixtures'dan esinlenerek oluşturulan Vitest'in test bağlamı, testlerinizde kullanabileceğiniz yardımcı araçları, durumları ve test verilerini tanımlamanıza olanak tanır.

Kullanım ​

Her test fonksiyonunun ilk argümanı bir test bağlamıdır.

ts
import { it } from 'vitest';

it('çalışması gerekir', ctx => {
  // Testin adını yazdırır
  console.log(ctx.task.name);
});

Yerleşik Test Bağlamı ​

context.task ​

Testle ilgili meta verileri içeren, sadece okunabilir bir nesnedir.

context.expect ​

Geçerli teste bağlı expect API'si:

ts
import { it } from 'vitest';

it('matematik kolaydır', ({ expect }) => {
  expect(2 + 2).toBe(4);
});

Bu API, anlık görüntü testlerini eş zamanlı çalıştırmak için kullanışlıdır, çünkü global expect bunları takip edemez:

ts
import { it } from 'vitest';

it.concurrent('matematik kolaydır', ({ expect }) => {
  expect(2 + 2).toMatchInlineSnapshot();
});

it.concurrent('matematik zordur', ({ expect }) => {
  expect(2 * 2).toMatchInlineSnapshot();
});

context.skip ​

Sonraki testin yürütülmesini atlar ve testi atlanmış olarak işaretler:

ts
import { expect, it } from 'vitest';

it('matematik zordur', ({ skip }) => {
  skip();
  expect(2 + 2).toBe(5);
});

Test Bağlamını Genişletme ​

Vitest, test bağlamını genişletmeniz için iki farklı yöntem sunar.

test.extend ​

WARNING

Bu API, Vitest 0.32.3 sürümünden itibaren kullanılabilir.

Playwright gibi, bu metodu özel test verileriyle kendi test API'nizi tanımlamak ve istediğiniz yerde tekrar kullanmak için kullanabilirsiniz.

Örneğin, önce iki test verisiyle myTest oluşturuyoruz: todos ve archive.

ts
// my-test.ts
import { test } from 'vitest';

const todos = [];
const archive = [];

export const myTest = test.extend({
  todos: async ({ task }, use) => {
    // Her test fonksiyonundan önce test verisini hazırlayın
    todos.push(1, 2, 3);

    // Test verisi değerini kullanın
    await use(todos);

    // Her test fonksiyonundan sonra test verisini temizle/sıfırla
    todos.length = 0;
  },
  archive,
});

Sonrasında içe aktarabilir ve kullanabilirsiniz.

ts
import { expect } from 'vitest';
import { myTest } from './my-test.ts';

myTest('öğeleri yapılacaklara ekle', ({ todos }) => {
  expect(todos.length).toBe(3);

  todos.push(4);
  expect(todos.length).toBe(4);
});

myTest('öğeleri yapılacaklardan arşive taşı', ({ todos, archive }) => {
  expect(todos.length).toBe(3);
  expect(archive.length).toBe(0);

  archive.push(todos.pop()!); // pop() undefined döndürebilir, bu yüzden ! operatörü ekledik
  expect(todos.length).toBe(2);
  expect(archive.length).toBe(1);
});

myTest'i genişleterek daha fazla test verisi ekleyebilir veya mevcut test verilerini geçersiz kılabiliriz.

ts
export const myTest2 = myTest.extend({
  settings: {
    // ...
  },
});

Fikstür Başlatma ​

Vitest çalıştırıcısı, test verilerinizi akıllıca başlatır ve kullanıma bağlı olarak test bağlamına yerleştirir.

ts
import { test } from 'vitest';

async function todosFn({ task }, use: (todos: number[]) => Promise<void>) {
  await use([1, 2, 3]);
}

const myTest = test.extend({
  todos: todosFn,
  archive: [],
});

// todosFn çalışmayacak.
myTest('', () => {});
myTest('', ({ archive }) => {});

// todosFn çalışacak.
myTest('', ({ todos }) => {});

WARNING

test.extend()'i test verileriyle kullanırken, hem test verisi fonksiyonunda hem de test fonksiyonunda bağlama erişmek için her zaman nesne yapısını çözme yöntemini { todos } kullanmalısınız.

Otomatik Fikstür ​

WARNING

Bu özellik Vitest 1.3.0 sürümünden itibaren kullanılabilir.

Vitest ayrıca fikstürler için demet sözdizimini destekler, bu da her fikstür için seçenekler geçirmenize olanak tanır. Örneğin, testlerde kullanılmasa bile bir fikstürü açıkça başlatmak için kullanabilirsiniz.

ts
import { test as base } from 'vitest';

const test = base.extend({
  fixture: [
    async ({}, use) => {
      // bu fonksiyon çalışacak
      setup();
      await use();
      teardown();
    },
    { auto: true }, // Otomatik bir fikstür olarak işaretle
  ],
});

test('', () => {});

TypeScript ​

Tüm özel bağlamlarınız için özellik tipleri tanımlamak için, test verisi tipini genel tip olarak geçirebilirsiniz.

ts
interface MyFixtures {
  todos: number[];
  archive: number[];
}

const myTest = test.extend<MyFixtures>({
  todos: [],
  archive: [],
});

myTest('', context => {
  expectTypeOf(context.todos).toEqualTypeOf<number[]>();
  expectTypeOf(context.archive).toEqualTypeOf<number[]>();
});

beforeEach ve afterEach ​

Bağlamlar her test için farklıdır. beforeEach ve afterEach kanca fonksiyonları içinde bunlara erişebilir ve bunları genişletebilirsiniz.

ts
import { beforeEach, it } from 'vitest';

beforeEach(async context => {
  // Bağlamı genişlet
  context.foo = 'bar';
});

it('çalışması gerekir', ({ foo }) => {
  console.log(foo); // 'bar'
});

TypeScript ​

Tüm özel bağlamlarınız için özellik tipleri tanımlamak için, TestContext tipini aşağıdaki gibi genişletebilirsiniz:

ts
declare module 'vitest' {
  export interface TestContext {
    foo?: string;
  }
}

Sadece belirli beforeEach, afterEach, it ve test fonksiyonları için özellik tipleri tanımlamak istiyorsanız, tipi generic olarak geçirebilirsiniz.

ts
interface LocalTestContext {
  foo: string;
}

beforeEach<LocalTestContext>(async context => {
  // typeof context is 'TestContext & LocalTestContext'
  context.foo = 'bar';
});

it<LocalTestContext>('çalışması gerekir', ({ foo }) => {
  // typeof foo is 'string'
  console.log(foo); // 'bar'
});
Pager
Önceki sayfaKaynak İçi Test
Sonraki sayfaTest Ortamı

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

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/test-context

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

Copyright (c) 2024 Mithril Contributors