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

Geçiş Rehberi ​

Vitest 0.34.6'dan Geçiş ​

Minimum Gereksinimler ​

Vitest 1.0, Vite 5.0 ve Node.js 18 veya daha üstünü gerektirir.

Tüm @vitest/* alt paketleri, Vitest sürüm 1.0'ı gerektirir.

Anlık Görüntü Güncellemesi #3961 ​

Anlık görüntülerdeki tırnak işaretleri artık escape edilmiyor ve tüm anlık görüntüler, dize tek satır olsa bile ters tırnak (`) kullanıyor.

  1. Tırnak işaretleri artık escape edilmiyor:
diff
expect({ foo: 'bar' }).toMatchInlineSnapshot(`
  Object {
-    \\"foo\\": \\"bar\\",
+    "foo": "bar",
  }
`)
  1. Tek satırlık anlık görüntülerde artık "'" yerine "`" tırnak işaretleri kullanılıyor:
diff
- expect('some string').toMatchInlineSnapshot('"some string"')
+ expect('some string').toMatchInlineSnapshot(`"some string"`)

Ayrıca @vitest/snapshot paketinde de değişiklikler yapıldı. Doğrudan kullanmıyorsanız, herhangi bir değişiklik yapmanız gerekmez.

  • Artık equalityCheck yöntemini geçersiz kılmak için SnapshotClient'ı genişletmenize gerek yok: sadece bir örnek oluştururken isEqual parametresi olarak geçirin.
  • client.setTest adı client.startCurrentRun olarak değiştirildi.
  • client.resetCurrent adı client.finishCurrentRun olarak değiştirildi.

Havuzlar Standartlaştırıldı #4172 ​

Test çalıştırıcısını ihtiyaçlarınıza göre yapılandırmayı kolaylaştırmak için yapılandırma seçeneklerini azalttık. --threads veya diğer ilgili işaretlere güveniyorsanız, lütfen geçiş örneklerine göz atın.

  • --threads artık --pool=threads
  • --no-threads artık --pool=forks
  • --single-thread artık --poolOptions.threads.singleThread
  • --experimental-vm-threads artık --pool=vmThreads
  • --experimental-vm-worker-memory-limit artık --poolOptions.vmThreads.memoryLimit
  • --isolate artık --poolOptions.<pool-name>.isolate ve browser.isolate
  • test.maxThreads artık test.poolOptions.<pool-name>.maxThreads
  • test.minThreads artık test.poolOptions.<pool-name>.minThreads
  • test.useAtomics artık test.poolOptions.<pool-name>.useAtomics
  • test.poolMatchGlobs.child_process artık test.poolMatchGlobs.forks
  • test.poolMatchGlobs.experimentalVmThreads artık test.poolMatchGlobs.vmThreads
diff
{
  scripts: {
-    "test": "vitest --no-threads"
     // Aynı davranış için:
+    "test": "vitest --pool forks --poolOptions.forks.singleFork"
     // Veya çoklu paralel çatallar:
+    "test": "vitest --pool forks"

  }
}
diff
{
  scripts: {
-    "test": "vitest --experimental-vm-threads"
+    "test": "vitest --pool vmThreads"
  }
}
diff
{
  scripts: {
-    "test": "vitest --isolate false"
+    "test": "vitest --poolOptions.threads.isolate false"
  }
}
diff
{
  scripts: {
-    "test": "vitest --no-threads --isolate false"
+    "test": "vitest --pool forks --poolOptions.forks.isolate false"
  }
}

Kapsamda Değişiklikler #4265, #4442 ​

coverage.all seçeneği artık varsayılan olarak etkindir. Bu, coverage.include deseniyle eşleşen tüm proje dosyalarının, çalıştırılmasalar bile kapsama dahil edileceği anlamına gelir.

Kapsam eşikleri API'sinin yapısı değiştirildi ve artık glob desenlerini kullanarak belirli dosyalar için eşikler belirtmeyi destekliyor:

diff
export default defineConfig({
  test: {
    coverage: {
-      perFile: true,
-      thresholdAutoUpdate: true,
-      100: true,
-      lines: 100,
-      functions: 100,
-      branches: 100,
-      statements: 100,
+      thresholds: {
+        perFile: true,
+        autoUpdate: true,
+        100: true,
+        lines: 100,
+        functions: 100,
+        branches: 100,
+        statements: 100,
+      }
    }
  }
})

Mock Tipleri #4400 ​

Jest tarzı 'Mock' isimlendirmesi lehine bazı tipler kaldırıldı.

diff
- import { EnhancedSpy, SpyInstance } from 'vitest'
+ import { MockInstance } from 'vitest'

WARNING

SpyInstance kullanımdan kaldırılmıştır, yerine MockInstance kullanılacaktır ve bir sonraki ana sürümde kaldırılacaktır.

Zamanlayıcı Mock'ları #3925 ​

vi.useFakeTimers(), artık process.nextTick'i otomatik olarak sahte zamanlayıcılarla değiştirmiyor. vi.useFakeTimers({ toFake: ['nextTick'] }) kullanarak açıkça belirterek process.nextTick'i taklit etmek hala mümkündür.

Ancak, --pool=forks kullanıldığında process.nextTick'i taklit etmek mümkün değildir. process.nextTick'i taklit etmeniz gerekiyorsa farklı bir --pool seçeneği kullanın.

Jest'ten Geçiş ​

Vitest, Jest'ten geçişi olabildiğince basit hale getirmek için Jest uyumlu bir API ile tasarlanmıştır. Bu çabalara rağmen, aşağıdaki farklılıklarla karşılaşabilirsiniz:

Varsayılan olarak Globaller ​

Jest'te globals API varsayılan olarak etkindir, Vitest'te ise böyle değildir. The globals yapılandırma ayarı aracılığıyla global'leri etkinleştirebilir veya bunun yerine vitest modülünden içe aktarmaları kullanmak için kodunuzu güncelleyebilirsiniz.

Global'leri devre dışı bırakmaya karar verirseniz, testing-library gibi yaygın kitaplıkların otomatik DOM cleanup yapmayacağını unutmayın.

Modül Mock'ları ​

Jest'te bir modülü mock'larken, fabrika fonksiyonunun dönüş değeri varsayılan export'tur. Vitest'te, fabrika argümanı her dışa aktarımı açıkça tanımlanmış bir nesne döndürmelidir. Örneğin, aşağıdaki jest.mock'un aşağıdaki gibi güncellenmesi gerekir:

ts
jest.mock('./some-path', () => 'hello'); 
vi.mock('./some-path', () => ({
  default: 'hello', 
})); 

Daha fazla ayrıntı için lütfen vi.mock api bölümüne bakın.

Otomatik Mock'lama Davranışı ​

Jest'ten farklı olarak, <root>/__mocks__ içindeki mock'lanmış modüller, vi.mock() çağrılmadığı sürece etkinleştirilmez. Jest'te olduğu gibi her testte mock'lanmaları gerekiyorsa, bunları setupFiles içinde mock'layabilirsiniz.

Mock'lanmış Bir Paketin Orijinalini İçe Aktarma ​

Bir paketi yalnızca kısmen mock'luyorsanız, daha önce Jest'in requireActual işlevini kullanmış olabilirsiniz. Vitest'te, bu çağrıları vi.importActual ile değiştirmelisiniz.

ts
const { cloneDeep } = jest.requireActual('lodash/cloneDeep'); 
const { cloneDeep } = await vi.importActual('lodash/cloneDeep'); 

Mock'lamayı Harici Kitaplıklara Uygulama ​

Jest'te bu varsayılan olarak yapılır. Ancak Vitest'te, bir modülü mock'larken ve bu mock'lamanın aynı modülü kullanan diğer harici kitaplıklara uygulanmasını istiyorsanız, hangi 3. taraf kitaplığının mock'lanmasını istediğinizi açıkça belirtmelisiniz. Bu sayede harici kitaplık server.deps.inline kullanılarak kaynak kodunuzun bir parçası olur.

server.deps.inline: ["lib-name"]

Mock'lanmış Bir Promise'in Dönüş Değerlerine Erişme ​

Hem Jest hem de Vitest, tüm mock çağrılarının sonuçlarını mock.results dizisinde saklar; burada her çağrının dönüş değerleri value özelliğinde saklanır. Ancak, bir promise'i mock'larken veya gözetlerken (örneğin mockResolvedValue kullanarak), Jest'te value özelliği bir promise dönerken, Vitest'te promise çözüldüğünde çözülmüş değeri döner.

ts
await expect(spy.mock.results[0].value).resolves.toBe(123); 
expect(spy.mock.results[0].value).toBe(123); 

Ortam Değişkenleri (Envs) ​

Tıpkı Jest gibi, Vitest de daha önce ayarlanmamışsa NODE_ENV'yi test olarak ayarlar. Vitest'te JEST_WORKER_ID'nin karşılığı olarak VITEST_POOL_ID (her zaman maxThreads'den küçük veya ona eşit) bulunur. Eğer JEST_WORKER_ID'ye güveniyorsanız, bunu VITEST_POOL_ID olarak yeniden adlandırmayı unutmayın. Vitest ayrıca, çalışan bir işçinin benzersiz bir kimliği olan VITEST_WORKER_ID'yi de kullanıma sunar - bu sayı maxThreads'den etkilenmez ve oluşturulan her işçiyle birlikte artar.

Özelliği Değiştirme (Replace property) ​

Nesneyi değiştirmek istiyorsanız, Jest'te replaceProperty API kullanırsınız. Vitest'te ise aynı işlevi vi.stubEnv veya vi.spyOn ile gerçekleştirebilirsiniz.

Bitti Geri Çağrısı (Done Callback) ​

Vitest v0.10.0'dan itibaren, test tanımlamada callback stili kullanımdan kaldırılmıştır. Bunları async/await işlevlerini kullanmak veya geri çağrı stilini taklit etmek için Promise kullanmak üzere yeniden yazabilirsiniz.

it('should work', (done) => {  // [!code --]
it('should work', () => new Promise(done => { // [!code ++]
  // ...
  done()
}) // [!code --]
})) // [!code ++]

Kancalar (Hooks) ​

beforeAll/beforeEach kancaları Vitest'te temizlik fonksiyonu döndürebilir. Bu nedenle, undefined veya null dışında bir şey döndürürlerse, kancalarınızı yeniden düzenlemeniz gerekebilir:

ts
beforeEach(() => setActivePinia(createTestingPinia())); 
beforeEach(() => {
  setActivePinia(createTestingPinia());
}); 

Jest'te kancalar sıralı olarak (birbiri ardına) çağrılır. Varsayılan olarak, Vitest kancaları paralel olarak çalıştırır. Jest'in davranışını kullanmak için sequence.hooks seçeneğini güncelleyin:

ts
export default defineConfig({
  test: {
    sequence: {
      hooks: 'list', 
    }, 
  },
});

Tipler (Types) ​

Vitest'te jest ad alanı bulunmamaktadır, bu nedenle tipleri doğrudan vitest'ten içe aktarmanız gerekir:

ts
let fn: jest.Mock<string, [string]>; 
import type { Mock } from 'vitest'; 
let fn: Mock<[string], string>; 

Ayrıca, Vitest'te diff'te görebileceğiniz gibi Returns yerine ilk argüman olarak Args tipi vardır.

Zamanlayıcılar (Timers) ​

Vitest, Jest'in eski zamanlayıcılarını desteklemez.

Zaman Aşımı (Timeout) ​

jest.setTimeout kullandıysanız, vi.setConfig'e geçmeniz gerekir:

ts
jest.setTimeout(5_000); 
vi.setConfig({ testTimeout: 5_000 }); 

Vue Anlık Görüntüleri (Vue Snapshots) ​

Bu, Jest'e özgü bir özellik değildir, ancak daha önce Jest'i vue-cli ön ayarıyla kullanıyorsanız, jest-serializer-vue paketini yüklemeniz ve setupFiles içinde kullanmanız gerekir:

vite.config.js

js
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    setupFiles: ['./tests/unit/setup.js'],
  },
});

tests/unit/setup.js

js
import vueSnapshotSerializer from 'jest-serializer-vue';

expect.addSnapshotSerializer(vueSnapshotSerializer);

Aksi takdirde, anlık görüntülerinizde çok sayıda escape edilmiş " karakteri olacaktır.

Pager
Önceki sayfaDiğer Test Çalıştırıcılarıyla Karşılaştırmalar
Sonraki sayfaYaygın Hatalar

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

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/migration

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

Copyright (c) 2024 Mithril Contributors