Testleri Çalıştırma
WARNING
Bu kılavuz, bir Node.js betiği aracılığıyla testleri çalıştırmak için gelişmiş API'nin nasıl kullanılacağını açıklar. Yalnızca testleri çalıştırmak istiyorsanız, muhtemelen buna ihtiyacınız yoktur. Bu API özellikle kütüphane yazarları tarafından kullanılır.
Deneysel API'yi kullanırken Vitest'in sürümünü sabitlemenizi öneririz, çünkü yıkıcı değişiklikler SemVer'i takip etmeyebilir.
Vitest'i başlatmak için iki yöntem sunulur:
startVitest
: Vitest'i başlatır, gerekli paketlerin yüklü olduğunu doğrular ve testleri hemen çalıştırır.createVitest
: Sadece Vitest'i başlatır ve herhangi bir test çalıştırmaz.
startVitest
import { startVitest } from 'vitest/node';
const vitest = await startVitest(
'test',
[], // CLI filtreleri
{}, // Test yapılandırmasını geçersiz kılma
{}, // Vite yapılandırmasını geçersiz kılma
{} // Özel Vitest seçenekleri
);
const testModules = vitest.state.getTestModules();
for (const testModule of testModules) {
console.log(testModule.moduleId, testModule.ok() ? 'geçti' : 'başarısız oldu');
}
TIP
TestModule
, TestSuite
ve TestCase
API'leri deneysel değildir ve Vitest 2.1'den beri SemVer'i takip eder.
createVitest
Testleri çalıştırmadan bir Vitest örneği oluşturur.
createVitest
yöntemi, gerekli paketlerin yüklü olduğunu doğrulamaz. Ayrıca config.standalone
veya config.mergeReports
ayarlarını dikkate almaz. watch
modu devre dışı bırakılsa bile Vitest otomatik olarak kapanmaz.
import { createVitest } from 'vitest/node';
const vitest = await createVitest(
'test',
{}, // Test yapılandırmasını geçersiz kılma
{}, // Vite yapılandırmasını geçersiz kılma
{} // Özel Vitest seçenekleri
);
// `vitest.cancelCurrentRun()` çağrıldığında tetiklenir
vitest.onCancel(() => {});
// `vitest.close()` çağrısı sırasında tetiklenir
vitest.onClose(() => {});
// Vitest test dosyalarını yeniden çalıştırdığında tetiklenir
vitest.onTestsRerun(files => {});
try {
// Bu, testler başarısız olursa process.exitCode'yi 1 olarak ayarlayacak,
// ancak süreci otomatik olarak kapatmayacaktır.
await vitest.start(['my-filter']);
} catch (err) {
// Bu bir hata döndürebilir:
// - Dosya bulunamazsa "FilesNotFoundError"
// - `--changed` ile ve depo başlatılmamışsa "GitNotFoundError"
} finally {
await vitest.close();
}
Bir Vitest
örneğini tutmayı düşünüyorsanız, en azından init
çağrısını yaptığınızdan emin olun. Bu, raporlayıcıları ve kapsama sağlayıcısını başlatacak, ancak test çalıştırmayacaktır. Vitest izleyicisini kullanmayı düşünmeseniz bile, örneği çalışır durumda tutmak için watch
modunu etkinleştirmeniz önerilir. Vitest, bazı özelliklerinin sürekli bir süreçte doğru şekilde çalışması için bu bayrağa ihtiyaç duyar.
Raporlayıcılar başlatıldıktan sonra, manuel çalıştırma gerektiğinde testleri çalıştırmak için runTestSpecifications
veya rerunTestSpecifications
kullanın:
watcher.on('change', async file => {
const specifications = vitest.getModuleSpecifications(file);
if (specifications.length) {
vitest.invalidateFile(file);
// "reporter.onWatcher*" kancalarının çağrılmaması gerekiyorsa
// runTestSpecifications kullanabilirsiniz.
await vitest.rerunTestSpecifications(specifications);
}
});
WARNING
Bu örnek, varsayılan izleyici davranışını devre dışı bırakmanız durumunda olası bir kullanım senaryosunu gösterir. Varsayılan olarak, Vitest dosyalar değişirse testleri zaten yeniden çalıştırır.
Ayrıca, getModuleSpecifications
'ın test dosyalarını, globTestSpecifications
tarafından zaten işlenmedikçe çözümlemeyeceğini unutmayın. Dosya yeni oluşturulduysa, bunun yerine project.matchesGlobPattern
kullanın:
watcher.on('add', async file => {
const specifications = [];
for (const project of vitest.projects) {
if (project.matchesGlobPattern(file)) {
specifications.push(project.createSpecification(file));
}
}
if (specifications.length) {
await vitest.rerunTestSpecifications(specifications);
}
});
İzleyiciyi devre dışı bırakmanız gereken durumlarda, Vite 5.3'ten beri server.watch: null
veya bir Vite yapılandırmasına server.watch: { ignored: ['*/*'] }
geçirebilirsiniz:
await createVitest(
'test',
{},
{
plugins: [
{
name: 'stop-watcher',
async configureServer(server) {
await server.watcher.close();
},
},
],
server: {
watch: null,
},
}
);