Test Ortamı
Vitest, kodu belirli bir ortamda çalıştırmak için environment
seçeneğini sunar. Ortamın davranışını değiştirmek için environmentOptions
seçeneğini kullanabilirsiniz.
Varsayılan olarak şu ortamları kullanabilirsiniz:
node
: Varsayılan ortamdır.jsdom
:jsdom
paketini kullanarak Tarayıcı API'lerini sağlayarak bir tarayıcı ortamını taklit eder.happy-dom
: Tarayıcı API'lerini sağlayarak bir tarayıcı ortamını taklit eder. jsdom'dan daha hızlı olduğu düşünülmektedir, ancak bazı API'leri eksiktir.happy-dom
paketini kullanır.edge-runtime
: Vercel'in edge-runtime ortamını simüle eder.@edge-runtime/vm
paketini kullanır.
Belirli Dosyalar İçin Ortamlar
Yapılandırmanızda environment
seçeneğini ayarladığınızda, bu ayar projenizdeki tüm test dosyalarına uygulanır. Daha ayrıntılı bir kontrol için, belirli dosyalar için ortamı belirtmek üzere kontrol yorumlarını kullanabilirsiniz. Kontrol yorumları, @vitest-environment
ile başlar ve ardından ortam adı gelir:
// @vitest-environment jsdom
import { test } from 'vitest';
test('test', () => {
expect(typeof window).not.toBe('undefined');
});
Alternatif olarak, glob desenlerine göre ortamı belirleyen environmentMatchGlobs
seçeneğini de ayarlayabilirsiniz.
Özel Ortam
0.23.0 sürümünden itibaren, Vitest ortamını genişletmek için vitest-environment-${name}
adıyla kendi paketinizi oluşturabilir veya geçerli bir JS dosyasına yol belirtebilirsiniz (0.34.0 sürümünden beri desteklenir). Bu paket, Environment
arayüzüne uygun bir nesne dışa aktarmalıdır:
import type { Environment } from 'vitest';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
// isteğe bağlı - yalnızca "experimental-vm" havuzunu destekliyorsanız
async setupVM() {
const vm = await import('node:vm');
const context = vm.createContext();
return {
getVmContext() {
return context;
},
teardown() {
// Bu ortamı kullanan tüm testler çalıştırıldıktan sonra çağrılır
},
};
},
setup() {
// özel kurulum
return {
teardown() {
// Bu ortamı kullanan tüm testler çalıştırıldıktan sonra çağrılır
},
};
},
};
WARNING
0.34.0 sürümünden itibaren Vitest, ortam nesnesinde transformMode
seçeneğini gerektirir. Bu seçenek ssr
veya web
değerlerinden birine eşit olmalıdır. Bu değer, eklentilerin kaynak kodunu nasıl dönüştüreceğini belirler. ssr
olarak ayarlanırsa, eklenti kancaları dosyaları dönüştürürken veya çözerken ssr: true
değerini alır. Aksi takdirde, ssr
false
olarak ayarlanır.
Ayrıca, vitest/environments
girişi aracılığıyla varsayılan Vitest ortamlarına da erişebilirsiniz:
import { builtinEnvironments, populateGlobal } from 'vitest/environments';
console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }
Vitest ayrıca, nesne özelliklerini global scope'a taşımaya yarayan populateGlobal
yardımcı işlevini de sağlar:
interface PopulateOptions {
// Sınıf olmayan fonksiyonlar global ad alanına bağlanmalı mı?
bindFunctions?: boolean;
}
interface PopulateResult {
// Değer orijinal nesnede olmasa bile kopyalanan tüm anahtarların listesi
keys: Set<string>;
// Anahtarlar ile üzerine yazılmış olabilecek orijinal nesnenin bir haritası
originals: Map<string | symbol, any>;
}
export function populateGlobal(
global: any,
original: any,
options: PopulateOptions
): PopulateResult;