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), во вкладке Env будет VITEST_RETRY (1 — второй запуск).

Переменные окружения и режим прогона: Адаптеры автотестов.

Привязка testCaseId и autotestName

Импортируйте test / expect / хуки из vitest, а из @tracera/vitest — tracera / annotations. Свой runner обязателен, чтобы шаги в стандартных хуках попадали в Предусловие / Постусловие (Vitest замораживает экспорты хуков). @tracera/vitest/setup открывает контекст на каждый тест. Если не задать autotestName, адаптер берёт название теста Vitest.

В объявлении (предпочтительно — привязка сработает, даже если тест сразу уйдёт в skip):

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 вложений у результата и у каждого шага).

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