Görev Meta Verileri
WARNING
Vitest deneysel bir özel API sunmaktadır. Yıkıcı değişiklikler SemVer kurallarına uymayabilir, lütfen kullanırken Vitest'in sürümünü sabitleyin.
Özel bir raporlayıcı geliştiriyorsanız veya Vitest Node.js API'sini kullanıyorsanız, farklı bağlamlarda çalıştırılan testlerden raporlayıcınıza veya özel Vitest işleyicinize veri aktarmanın faydalı olabileceğini görebilirsiniz.
Bunun için, test bağlamına güvenmek mümkün değildir, çünkü bu bağlam serileştirilemez. Ancak Vitest ile, testleriniz ve Node.js süreci arasında veri paylaşmak için her görevde (süit veya test) mevcut olan meta
özelliğini kullanabilirsiniz. Bu iletişimin tek yönlü olduğunu unutmamak önemlidir, zira meta
özelliği yalnızca test bağlamından değiştirilebilir. Node.js tarafında yapılan herhangi bir değişiklik testlerinizde görünmeyecektir.
meta
özelliğini test bağlamında veya süit görevleri için beforeAll
/afterAll
kancalarında doldurabilirsiniz.
afterAll(suite => {
suite.meta.done = true;
});
test('custom', ({ task }) => {
task.meta.custom = 'some-custom-handler';
});
Test tamamlandığında, Vitest, sonuç ve meta
içeren bir görevi RPC aracılığıyla Node.js sürecine gönderecek ve ardından onTestCaseResult
ve görevlere erişimi olan diğer kancalarda raporlayacaktır. Bu test senaryosunu işlemek için, raporlayıcı uygulamanızda bulunan onTestCaseResult
yöntemini kullanabilirsiniz:
import type { Reporter, TestCase, TestModule } from 'vitest/node';
export default {
onTestCaseResult(testCase: TestCase) {
// custom === 'some-custom-handler' ✅
const { custom } = testCase.meta();
},
onTestRunEnd(testModule: TestModule) {
testModule.meta().done === true;
testModule.children.at(0).meta().custom === 'some-custom-handler';
},
} satisfies Reporter;
DİKKAT
Vitest, Node.js süreciyle iletişim kurmak için farklı yöntemler kullanır.
- Vitest, worker thread'leri içinde testleri çalıştırırsa, verileri mesaj portu aracılığıyla gönderecektir.
- Vitest, child process kullanıyorsa, veriler
process.send
API aracılığıyla serileştirilmiş bir Buffer olarak gönderilecektir. - Vitest, tarayıcıda testleri çalıştırırsa, veriler flatted paketi kullanılarak stringleştirilecektir.
Bu özellik, json
raporlayıcısındaki her testte de mevcuttur, bu nedenle verilerin JSON'a serileştirilebildiğinden emin olun.
Ayrıca, Hata özelliklerini ayarlamadan önce serileştirdiğinizden emin olun.
Testler tamamlandığında bu bilgiyi Vitest durumundan da alabilirsiniz:
const vitest = await createVitest('test');
const { testModules } = await vitest.start();
const testModule = testModules[0];
testModule.meta().done === true;
testModule.children.at(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;
}
}