Görev Meta Verileri
WARNING
Vitest, deneysel özel API'ler sunmaktadır. Uyumsuz değişiklikler sürüm takip kurallarına uymayabilir, bu nedenle kullanırken lütfen Vitest'in sürümünü belirtin.
Özel bir raporlayıcı geliştiriyorsanız veya Vitest Node.js API'sini kullanıyorsanız, çeşitli bağlamlarda yürütülen testlerden raporlayıcınıza veya özel Vitest işleyicinize veri aktarmak faydalı olabilir.
Bunu başarmak için test bağlamına güvenmek mümkün değildir; çünkü serileştirilemez bir yapıya sahiptir. Ancak Vitest ile, testleriniz ve Node.js süreci arasında veri paylaşmak için her görevde (test grubu veya test) bulunan meta
özelliğini kullanabilirsiniz. Bu iletişimin yalnızca tek yönlü olduğunu unutmamak önemlidir; çünkü meta
özelliği yalnızca test bağlamı içinden değiştirilebilir. Node.js bağlamında yapılan herhangi bir değişiklik testlerinizde görünmez.
meta
özelliğini test bağlamında veya test grubu görevleri için beforeAll
/ afterAll
kancalarında doldurabilirsiniz.
afterAll((suite) => {
suite.meta.done = true
})
test('custom', ({ task }) => {
task.meta.custom = 'some-custom-handler'
})
Bir test tamamlandıktan sonra, Vitest sonucu ve meta
verilerini içeren görevi RPC ile Node.js sürecine gönderir. Bu görevi yakalamak ve işlemek için, raporlayıcı uygulamanızda bulunan onTaskUpdate
yöntemini kullanabilirsiniz:
// custom-reporter.js
export default {
// İhtiyaç duyarsanız veri paketlerini yakalayabilirsiniz
onTaskUpdate(packs) {
const [id, result, meta] = packs[0]
},
// meta, "onFinished" içindeki her görevde bulunur
onFinished(files) {
files[0].meta.done === true
files[0].tasks[0].meta.custom === 'some-custom-handler'
}
}
WARNING
Kısa bir süre içinde birkaç test tamamlanırsa, Vitest aynı anda birden fazla test sonucu gönderebilir.
DİKKAT
Vitest, Node.js süreciyle iletişim kurmak için farklı yöntemler kullanır.
- Vitest, testleri worker thread'lerde çalıştırırsa, verileri mesaj portu aracılığıyla gönderir.
- Vitest, child process kullanırsa, veriler
process.send
API'si aracılığıyla serileştirilmiş bir Buffer olarak gönderilir. - Vitest, testleri tarayıcıda çalıştırırsa, veriler flatted paketi kullanılarak metne dönüştürülür.
Genel kural olarak, fonksiyonlar, Promises, regexp ( v8.stringify
bunu serileştiremez; ancak string versiyonunu gönderebilir ve Node.js sürecinde kendiniz ayrıştırabilirsiniz) ve diğer serileştirilemeyen veriler hariç neredeyse her şeyi gönderebilirsiniz. Döngüsel referanslar içerebilir.
Ayrıca, göndermeden önce Error özelliklerini serileştirdiğinizden emin olun.
Testler çalışmayı bitirdiğinde bu bilgiyi Vitest durumundan da alabilirsiniz:
const vitest = await createVitest('test')
await vitest.start()
vitest.state.getFiles()[0].meta.done === true
vitest.state.getFiles()[0].tasks[0].meta.custom === 'some-custom-handler'
TypeScript kullanırken tür tanımlarını genişletmek de mümkündür:
declare module 'vitest' {
interface TaskMeta {
done?: boolean
custom?: string
}
}