Vitest

npm install @tracera/vitest

Node.js 22.19–26.12 और Vitest 2–5.0 पर परीक्षित (देखें ऑटोटेस्ट एडेप्टर)। @tracera/vitest npm पर.

vitest.config.ts में:

import { defineConfig } from 'vitest/config';
import { tracera } from '@tracera/vitest/plugin';

export default defineConfig({
  plugins: [tracera()],
});

प्लगइन कस्टम runner, setup और reporter लगाता है। चाहें तो test.runner / setupFiles / reporters मैन्युअल भी सेट कर सकते हैं।

एनवायरनमेंट, रन मोड और रीट्राई: ऑटोटेस्ट एडेप्टर।

रीट्राई Env कुंजी: VITEST_RETRY।

testCaseId और autotestName बाँधना

test, expect और hooks vitest से इम्पोर्ट करें, और tracera और annotations @tracera/vitest से। प्लगइन runner, setup और reporter जोड़ता है ताकि स्टॉक beforeEach / afterEach परिणाम के सेटअप / टीयरडाउन में जाएँ।

घोषणा पर (पसंदीदा — बॉडी जल्दी छोड़ दे तो भी बाइंड चलता है):

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);
});

Skip

स्टॉक Vitest skip (test.skip, या टेस्ट context से skip(reason))। Skip reason परिणाम में comment के रूप में जुड़ता है।

import { test } from 'vitest';
import { annotations } from '@tracera/vitest';

test('login', { meta: annotations(42, 'e2e/login') }, async ({ skip }) => {
  if (!process.env.READY) skip('env not ready');
});

स्टेप्स

tracera.step इस्तेमाल करें: कॉल tracera.step(title, fn), क्लास मेथड पर डेकोरेटर @tracera.step("…"), या tracera.step("…")(fn)। डेकोरेटर शीर्षक में {name} / {0} मेथड आर्गुमेंट से भरते हैं; शीर्षक लौटाने वाला फ़ंक्शन भी दे सकते हैं। कॉल-फ़ॉर्म में {name} / {0} नहीं भरते — तैयार शीर्षक स्ट्रिंग दें (या खुद बनाएँ)। Async मेथड और Promise पूरे होने तक प्रतीक्षा होती है। Tracera प्लगइन (या स्पष्ट runner: "@tracera/vitest/runner") के साथ मानक beforeEach / afterEach के अंदर स्टेप्स परिणाम के सेटअप / टीयरडाउन में जाते हैं। सूट-स्तरीय हुक्स (beforeAll / afterAll) रिपोर्ट नहीं होते।

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 () => {
    // …
  });
});

मेथड पर डेकोरेटर:

import { tracera } from '@tracera/vitest';

class Cart {
  @tracera.step('add {item}')
  async addToCart(item: string) {
    // …
  }
}

टिप्पणियाँ, त्रुटियाँ और अटैचमेंट

टिप्पणी, त्रुटियाँ और अटैचमेंट: ऑटोटेस्ट एडेप्टर।

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'),
    });
  });
});

पैरामीटराइज़्ड टेस्ट

test.each / test.for के साथ कॉलबैक लपेटें: annotations(id, 'login as {login}', fn) — ऑब्जेक्ट पंक्ति के फ़ील्ड {login} जैसे प्लेसहोल्डर भरते हैं। वैकल्पिक {param_id} — उस पंक्ति का Vitest टेस्ट नाम।

import { test, expect } from 'vitest';
import { annotations } from '@tracera/vitest';

test.each([{ login: 'ok' }, { login: 'sso' }])(
  'login as $login',
  annotations(42, 'login as {login}', async ({ login }) => {
    expect(login).toBeTruthy();
  }),
);