Vitest
npm install @tracera/vitest
يتطلب Node.js ≥ 22.19 (انظر محوّلات الاختبار الآلي). @tracera/vitest على npm.
في vitest.config.ts:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
runner: '@tracera/vitest/runner',
setupFiles: ['@tracera/vitest/setup'],
reporters: ['default', '@tracera/vitest/reporter'],
},
});
مع إعادة المحاولة يُبلَّغ عن محاولة Vitest النهائية فقط. إن كانت إعادة محاولة (retry > 0) تظهر VITEST_RETRY في تبويب Env (1 تعني التشغيل الثاني).
متغيرات البيئة ووضع التشغيل: محوّلات الاختبار الآلي.
ربط testCaseId و autotestName
استورد test / expect / الخطافات من vitest، وtracera / annotations من @tracera/vitest. الـ runner المخصص مطلوب حتى تذهب الخطوات داخل الخطافات القياسية إلى الإعداد / التنظيف (Vitest يجمّد تصديرات الخطافات). @tracera/vitest/setup يفتح سياق كل اختبار. إن لم تُحدّد autotestName، يستخدم المحوّل عنوان اختبار Vitest.
عند التصريح (المفضّل — الربط يعمل حتى لو تخطّى الجسم مبكرًا):
import { test, expect } from 'vitest';
import { annotations } from '@tracera/vitest';
test('login', { meta: annotations(42, 'e2e/login') }, async () => {
expect(true).toBe(true);
});
داخل الاختبار (اختياري إذا ربطت annotations الحالة مسبقًا):
import { test, expect } from 'vitest';
import { tracera } from '@tracera/vitest';
test('login', async () => {
tracera.testCase(42, 'e2e/login');
expect(true).toBe(true);
});
الخطوات
استخدم tracera.step. مع runner: "@tracera/vitest/runner"، الخطوات داخل beforeEach / afterEach القياسية تذهب إلى الإعداد / التنظيف.
import { test, beforeEach, afterEach } from 'vitest';
import { tracera } from '@tracera/vitest';
beforeEach(async () => {
await tracera.step('open shop', async () => {
// …
});
});
test('checkout', async () => {
tracera.testCase(10, 'e2e/checkout');
await tracera.step('add to cart', async () => {
// …
});
});
afterEach(async () => {
await tracera.step('cleanup', async () => {
// …
});
});
التعليقات والأخطاء والمرفقات
داخل الخطوة حقول تلك الخطوة. خارج الخطوة حقول النتيجة. للملفات استخدم tracera.attachment (10 مرفقات كحد أقصى للنتيجة و10 لكل خطوة).
import { test } from 'vitest';
import { tracera } from '@tracera/vitest';
test('login', async () => {
tracera.testCase(42, 'e2e/login');
tracera.comment('result-level note');
tracera.error('result-level error text');
await tracera.step('open login', async () => {
tracera.comment('landed on login');
tracera.attachment({
fileName: 'suite-log.txt',
mimeType: 'text/plain',
data: new TextEncoder().encode('finished login flow'),
});
});
});