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

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ü

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

Profiling Test Performance

Performansı İyileştirme

Bu sayfada

Geçiş Kılavuzu ​

Vitest 2.0'a Geçiş ​

Varsayılan Havuz forks ​

Vitest 2.0, daha iyi kararlılık için pool varsayılan yapılandırmasını 'forks' olarak değiştirir. Tam motivasyonu PR adresinde bulabilirsiniz.

pool belirtmeden poolOptions kullandıysanız, yapılandırmayı güncellemeniz gerekebilir:

ts
export default defineConfig({
  test: {
    poolOptions: {
      threads: {
        singleThread: true, 
      }, 
      forks: {
        singleFork: true, 
      }, 
    },
  },
});

Kancalar Yığın İçinde Çalışıyor ​

Vitest 2.0'dan önce tüm kancalar paralel çalışıyordu. Vitest 2.0'da ise tüm kancalar seri olarak çalışır. Ek olarak, afterAll/afterEach kancaları ters sırada çalışır.

Kancaların paralel yürütülmesine geri dönmek için sequence.hooks değerini 'parallel' olarak değiştirin:

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

suite.concurrent Tüm Testleri Eşzamanlı Çalıştırır ​

Daha önce, bir pakette concurrent belirtmek, eşzamanlı testleri paketlere göre gruplandırır ve sırayla çalıştırırdı. Şimdi, Jest'in davranışını takiben, tüm testler eşzamanlı olarak çalışır (maxConcurrency limitlerine tabi olarak).

V8 Kapsamının coverage.ignoreEmptyLines Varsayılan Olarak Etkin ​

coverage.ignoreEmptyLines varsayılan değeri artık true'dur. Bu önemli değişiklik, kod kapsamı raporlarını etkileyebilir ve bazı projeler için kapsam eşiklerinin ayarlanmasını gerektirebilir. Bu ayarlama yalnızca coverage.provider 'v8' olduğunda varsayılan ayarı etkiler.

watchExclude Seçeneğinin Kaldırılması ​

Vitest, Vite'ın izleyicisini kullanır. Dosyaları veya dizinleri server.watch.ignored'a ekleyerek hariç tutun:

ts
export default defineConfig({
  server: {
    watch: {
      ignored: ['!node_modules/examplejs'], 
    }, 
  }, 
});

--segfault-retry Kaldırıldı ​

Varsayılan havuzdaki değişikliklerle birlikte, bu seçeneğe artık ihtiyaç duyulmamaktadır. Segfault hataları yaşıyorsanız, 'forks' havuzuna geçmeyi deneyin. Sorun devam ederse, lütfen yeniden üretilebilir bir örnekle yeni bir sorun açın.

Test Gruplarındaki Boş Görev Kaldırıldı ​

Bu, gelişmiş görev API'sında yapılan bir değişikliktir. Daha önce, .suite üzerinde gezinmek, bir dosya görevi yerine kullanılan boş dahili pakete yönlendirirdi.

Bu, .suite'i isteğe bağlı hale getirir; görev en üst düzeyde tanımlanmışsa, bir paketi bulunmayacaktır. Artık tüm görevlerde (dosya görevinin kendisi dahil, bu yüzden sonsuz özyinelemeye düşmemeye dikkat edin) bulunan .file özelliğini kullanabilirsiniz.

Bu değişiklik, expect.getState().currentTestName'den dosyayı kaldırır ve expect.getState().testPath'i zorunlu hale getirir.

task.meta JSON Raporlayıcıya Eklendi ​

JSON raporlayıcı artık her onay sonucunda task.meta'yı yazdırır.

Mock Fonksiyonlarının Basitleştirilmiş Generic Türleri (örn. vi.fn<T>, Mock<T>) ​

Daha önce vi.fn<TArgs, TReturn>, argümanlar ve dönüş değeri için ayrı ayrı iki genel türü kabul ediyordu. Bu, kullanımı basitleştirmek için doğrudan bir fonksiyon türü vi.fn<T> kabul edecek şekilde değiştirildi.

ts
import { type Mock, vi } from 'vitest';

const add = (x: number, y: number): number => x + y;

// vi.fn<T> kullanılıyor
const mockAdd = vi.fn<Parameters<typeof add>, ReturnType<typeof add>>(); 
const mockAdd = vi.fn<typeof add>(); 

// Mock<T> kullanılıyor
const mockAdd: Mock<Parameters<typeof add>, ReturnType<typeof add>> = vi.fn(); 
const mockAdd: Mock<typeof add> = vi.fn(); 

Çözülmüş mock.results'a Erişme ​

Daha önce Vitest, fonksiyon bir Promise döndürdüyse mock.results değerlerini çözümlüyordu. Artık, döndürülen Promise yalnızca çözümlendiğinde veya reddedildiğinde doldurulan ayrı bir mock.settledResults özelliği mevcuttur.

ts
const fn = vi.fn().mockResolvedValueOnce('result');
await fn();

const result = fn.mock.results[0]; // 'result'
const result = fn.mock.results[0]; // 'Promise<result>'

const settledResult = fn.mock.settledResults[0]; // 'result'

Bu değişiklikle birlikte, daha önce toHaveReturned kullandıysanız geçişi kolaylaştırmak için toHaveReturned'a benzer yeni toHaveResolved* eşleştiricileri de tanıtıyoruz:

ts
const fn = vi.fn().mockResolvedValueOnce('result');
await fn();

expect(fn).toHaveReturned('result'); 
expect(fn).toHaveResolved('result'); 

Tarayıcı Modu ​

Vitest Tarayıcı Modu, beta döngüsü boyunca birçok değişikliğe uğradı. Tarayıcı Modu hakkındaki felsefemizi GitHub tartışma sayfasında bulabilirsiniz.

Değişikliklerin çoğu eklemeydi, ancak bazı küçük kırılma değişiklikleri de vardı:

  • none sağlayıcısı preview olarak yeniden adlandırıldı #5842
  • preview sağlayıcısı artık varsayılan #5842
  • indexScripts orchestratorScripts olarak yeniden adlandırıldı #5842

Kullanımdan Kaldırılan Seçenekler Kaldırıldı ​

Bazı kullanımdan kaldırılan seçenekler kaldırıldı:

  • vitest typecheck komutu - bunun yerine vitest --typecheck kullanılmalıdır
  • VITEST_JUNIT_CLASSNAME ve VITEST_JUNIT_SUITE_NAME ortam değişkenleri (bunun yerine raporlayıcı seçenekleri kullanılmalıdır)
  • c8 kapsamı kontrolü (bunun yerine coverage-v8 kullanılmalıdır)
  • vitest'ten SnapshotEnvironment dışa aktarımı - bunun yerine vitest/snapshot'tan içe aktarılmalıdır
  • SpyInstance, MockInstance lehine kaldırıldı

Vitest 1.0'a Geçiş ​

Minimum Gereksinimler ​

Vitest 1.0, Vite 5.0 ve Node.js 18 veya daha yüksek bir sürüm gerektirir.

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

Snapshot Güncellemesi #3961 ​

Anlık görüntülerdeki tırnak işaretleri artık kaçış karakteriyle gösterilmiyor ve tüm anlık görüntüler, dize tek bir satır olsa bile ters tırnak işaretleri (`) kullanır.

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

Ayrıca @vitest/snapshot paketinde değişiklikler yapıldı. Doğrudan kullanmıyorsanız, herhangi bir şeyi değiştirmenize gerek yoktur.

  • Artık sadece equalityCheck yöntemini geçersiz kılmak için SnapshotClient'ı genişletmenize gerek yok: sadece bir örneği başlatırken isEqual olarak geçirin
  • client.setTest client.startCurrentRun olarak yeniden adlandırıldı
  • client.resetCurrent client.finishCurrentRun olarak yeniden adlandırıldı

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

Çalıştırıcıyı ihtiyaçlarınıza göre yapılandırmayı kolaylaştırmak için birçok yapılandırma seçeneği kaldırılmıştır. --threads veya diğer ilgili bayraklara güveniyorsanız, lütfen geçiş örneklerine bir 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"
  }
}

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

coverage.all seçeneği artık varsayılan olarak etkindir. Bu, coverage.include desenine uyan tüm proje dosyalarının yürütülmeseler bile işleneceği anlamına gelmektedir.

Kapsam eşikleri API'sinin şekli değiştirildi ve artık glob desenleri kullanarak belirli dosyalar için eşiklerin belirtilmesini 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 Türleri #4400 ​

Jest tarzı "Mock" adlandırması lehine birkaç tür kaldırıldı.

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

WARNING

SpyInstance, MockInstance lehine kullanımdan kaldırılmıştı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 taklit etmiyor. process.nextTick'i açıkça vi.useFakeTimers({ toFake: ['nextTick'] }) kullanarak taklit etmek hala mümkündür.

Ancak, --pool=forks kullanırken process.nextTick taklit etmek mümkün değildir. process.nextTick taklit etmeye ihtiyacınız varsa farklı bir --pool seçeneği kullanın.

Jest'ten Geçiş ​

Vitest, Jest'ten geçişi mümkün olduğunca basitleştirmek amacıyla Jest uyumlu bir API ile tasarlanmıştır. Bu çabalara rağmen, yine de aşağıdaki farklılıklarla karşılaşabilirsiniz:

Globals Varsayılan Değil ​

Jest, globals API'sini varsayılan olarak etkinleştirir. Vitest ise bunu yapmaz. Ya globals yapılandırma ayarı aracılığıyla globals'ı etkinleştirebilir ya da kodunuzu vitest modülünden içe aktarmaları kullanacak şekilde güncelleyebilirsiniz.

Globals'ı devre dışı bırakmaya karar verirseniz, testing-library gibi yaygın kütüphanelerin otomatik DOM temizliğini çalıştırmayacağını unutmayın.

Modül Mock'ları ​

Jest'te bir modülü taklit ederken, fabrika argümanının dönüş değeri varsayılan dışa aktarımdır. Vitest'te, fabrika argümanı, her dışa aktarımın açıkça tanımlandığı 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 Davranışı ​

Jest'in aksine, <root>/__mocks__ içindeki taklit edilmiş modüller, vi.mock() çağrılmadıkça yüklenmez. Jest'teki gibi her testte taklit edilmelerini istiyorsanız, bunları setupFiles içinde taklit edebilirsiniz.

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

Bir paketi yalnızca kısmen taklit ediyorsanı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'ları Harici Kütüphanelere Genişletme ​

Jest'in varsayılan olarak yaptığı gibi, bir modülü taklit ederken ve bu taklidin aynı modülü kullanan diğer harici kütüphanelere genişletilmesini istediğinizde, hangi üçüncü taraf kütüphanenin taklit edilmesini istediğinizi açıkça belirtmelisiniz. Böylece, harici kütüphane kaynak kodunuzun bir parçası olur. Bunu server.deps.inline kullanarak yapabilirsiniz.

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

expect.getState().currentTestName ​

Vitest'in test adları, testleri paketlerden ayırmayı kolaylaştırmak için > sembolüyle birleştirilirken, Jest boşluk () kullanır.

diff
- `${describeTitle} ${testTitle}`
+ `${describeTitle} > ${testTitle}`

Ortam Değişkenleri ​

Jest gibi, Vitest de daha önce ayarlanmamışsa NODE_ENV'i test olarak ayarlar. Vitest ayrıca JEST_WORKER_ID için VITEST_POOL_ID (her zaman maxThreads'a eşit veya daha az) adında bir karşılığa sahiptir, bu yüzden buna güveniyorsanız, yeniden adlandırmayı unutmayın. Vitest ayrıca çalışan bir işçinin benzersiz kimliği olan VITEST_WORKER_ID'yi de gösterir - bu sayı maxThreads'tan etkilenmez ve oluşturulan her işçiyle birlikte artacaktır.

ReplaceProperty Özelliği ​

Nesneyi değiştirmek isterseniz, Jest'te replaceProperty API'sini kullanırsınız. Vitest'te de aynısını yapmak için vi.stubEnv veya vi.spyOn kullanabilirsiniz.

Done Callback ​

Vitest v0.10.0'dan itibaren, testleri bildirme geri çağırma stili kullanımdan kaldırılmıştır. Bunları async/await işlevlerini kullanacak şekilde yeniden yazabilir veya geri çağırma stilini taklit etmek için Promise kullanabilirsiniz.

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

Kancalar ​

beforeAll/beforeEach kancaları Vitest'te kaldırma işlevi döndürebilir. Bu nedenle, undefined veya null dışında bir şey döndürüyorlarsa kanca bildirimlerinizi yeniden yazmanız gerekebilir:

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

Jest'te kancalar sırayla (birbiri ardına) çağrılır. Varsayılan olarak, Vitest kancaları paralel ç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', 
    }, 
  },
});

Türler ​

Vitest'in jest ad alanına eşdeğeri yoktur, bu nedenle türleri doğrudan vitest'ten içe aktarmanız gerekecektir:

ts
let fn: jest.Mock<(name: string) => number>; 
import type { Mock } from 'vitest'; 
let fn: Mock<(name: string) => number>; 

Zamanlayıcılar ​

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

Zaman Aşımı ​

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

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

Vue Snapshot'ları ​

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

js
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    setupFiles: ['./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 kaçış 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://v2.vitest.dev/guide/migration

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

Copyright (c) 2024 Mithril Contributors