Geçiş Rehberi
Jest'ten Geçiş
Vitest, Jest'ten geçişi kolaylaştırmak amacıyla Jest ile uyumlu bir API ile tasarlanmıştır. Bu çabalara rağmen, aşağıdaki farklılıklarla karşılaşabilirsiniz:
Varsayılan Olarak Global Değişkenler
Jest, globals API'lerini varsayılan olarak etkinleştirmiştir. Vitest bunu varsayılan olarak etkinleştirmez. The globals yapılandırma ayarı aracılığıyla global değişkenleri etkinleştirebilir veya bunun yerine vitest modülünden içe aktarmaları kullanmak için kodunuzu güncelleyebilirsiniz.
Global değişkenleri devre dışı bırakmaya karar verirseniz, testing-library gibi yaygın kütüphanelerin otomatik DOM temizleme işlemini gerçekleştirmediğini unutmayın.
Modül Sahteleri (Mocks)
Jest'te bir modülü sahtelerken, fabrika fonksiyonunun dönüş değeri varsayılan dışa aktarımdır. Vitest'te, fabrika fonksiyonu her dışa aktarımı açıkça tanımlayan bir nesne döndürmelidir. Örneğin, aşağıdaki jest.mock şu şekilde güncellenmelidir:
- 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 Sahteleme Davranışı
Jest'ten farklı olarak, <root>/__mocks__ içindeki mock'lanan modüller, vi.mock() çağrılmadığı sürece yüklenmez. Jest'te olduğu gibi, her testte sahtelenmeleri gerekiyorsa, bunları setupFiles içinde sahteleyebilirsiniz.
Taklit Edilen Bir Paketin Orijinalini İçe Aktarma
Bir paketi yalnızca kısmen sahteliyorsanız, daha önce Jest'in requireActual işlevini kullanmış olabilirsiniz. Vitest'te, bu çağrıları vi.importActual ile değiştirmelisiniz.
- const { cloneDeep } = jest.requireActual('lodash/cloneDeep')
+ const { cloneDeep } = await vi.importActual('lodash/cloneDeep')Ortam Değişkenleri
Tıpkı Jest gibi, Vitest de daha önce ayarlanmamışsa NODE_ENV'yi test olarak ayarlar. Vitest ayrıca JEST_WORKER_ID için VITEST_POOL_ID (her zaman maxThreads'den küçük veya eşit) adlı bir karşılığa sahiptir, bu nedenle buna güveniyorsanız, yeniden adlandırmayı unutmayın. Vitest ayrıca, çalışan bir worker'ın benzersiz kimliğini temsil eden VITEST_WORKER_ID değişkenini de sunar. Bu değer, maxThreads ayarından bağımsızdır ve her oluşturulan worker için artar.
Ortam değişkenlerini değiştirmek istiyorsanız, Jest'te replaceProperty API kullanırsınız, Vitest'te ise vi.stubEnv kullanabilirsiniz.
Tamamlandı Geri Çağrısı (Callback)
Vitest v0.10.0 sürümünden itibaren, test tanımlamalarında geri çağrı (callback) stilinin kullanımı önerilmemektedir. Bunları async/await işlevlerini kullanmak veya geri arama stilini taklit etmek için Promise kullanmak üzere yeniden yazabilirsiniz.
- it('should work', (done) => {
+ it('should work', () => new Promise(done => {
// ...
done()
- })
+ }))Kancalar
beforeAll/beforeEach kancaları Vitest'te teardown işlevi döndürebilir. Bu nedenle, undefined veya null dışında bir değer döndürüyorlarsa, hook tanımlarınızı yeniden düzenlemeniz gerekebilir:
- beforeEach(() => setActivePinia(createTestingPinia()))
+ beforeEach(() => { setActivePinia(createTestingPinia()) })Tipler
Vitest, Vi ad alanında çok fazla tip tanımlamaz. Bu ad alanı, temel olarak eşleştiricilerle uyumluluk içindir. Bu nedenle, tipleri Vi ad alanına güvenmek yerine doğrudan vitest modülünden import etmeniz gerekebilir:
- let fn: jest.Mock<string, [string]>
+ import type { Mock } from 'vitest'
+ let fn: Mock<[string], string>Ayrıca, Vitest'te örnekte görüldüğü gibi, Returns yerine ilk argüman olarak Args tipi vardır.
Zamanlayıcılar
Vitest, Jest'in eski zamanlayıcılarını desteklememektedir.
Vue Anlık Görüntüleri
Bu, Jest'e özgü bir özellik değildir; ancak daha önce vue-cli ön ayarıyla Jest kullanıyorsanız, jest-serializer-vue paketini yüklemeniz ve setupFiles içinde kullanmanız gerekecektir:
vite.config.js
import { defineConfig } from 'vite';
export default defineConfig({
test: {
setupFiles: ['./tests/unit/setup.js'],
},
});tests/unit/setup.js
import vueSnapshotSerializer from 'jest-serializer-vue';
expect.addSnapshotSerializer(vueSnapshotSerializer);Aksi takdirde, anlık görüntülerinizde çok sayıda ters eğik çizgi ile işaretlenmiş (\) " karakterleri görünecektir.