Jest
npm install @tracera/jest
Нужен Node.js ≥ 22.19 (см. Адаптеры автотестов). @tracera/jest на npm.
В jest.config.cjs (или вашем конфиге Jest):
module.exports = {
testEnvironment: 'node',
setupFilesAfterEnv: ['@tracera/jest/setup'],
reporters: ['default', '@tracera/jest/reporter'],
};
При повторах Jest в отчёт уходит только финальная попытка. Если это повтор (retry > 0), во вкладке Env будет JEST_RETRY (1 — второй запуск).
Переменные окружения и режим прогона: Адаптеры автотестов.
Привязка testCaseId и autotestName
Импортируйте test / expect / хуки из @jest/globals (или используйте глобальные API Jest), а из @tracera/jest — tracera / annotations / skip. @tracera/jest/setup оборачивает раннер, чтобы шаги и привязка работали со стандартными API Jest. Если не задать autotestName, адаптер берёт название теста Jest.
В объявлении (предпочтительно — привязка сработает, даже если сразу вызвать skip):
import { test, expect } from '@jest/globals';
import { annotations } from '@tracera/jest';
test(
'login',
annotations(42, 'e2e/login', async () => {
expect(true).toBe(true);
}),
);
Внутри теста (необязательно, если кейс уже привязан через annotations):
import { test, expect } from '@jest/globals';
import { tracera } from '@tracera/jest';
test('login', async () => {
tracera.testCase(42, 'e2e/login');
expect(true).toBe(true);
});
Пропуск
Если заранее известно, что тест нужно пропустить — используйте test.skip или describe.skip. Если условие выясняется только в коде теста — берите skip из этого пакета: у Jest нет test.skip(reason).
import { test } from '@jest/globals';
import { annotations, skip } from '@tracera/jest';
test(
'login',
annotations(42, 'e2e/login', () => {
if (!process.env.READY) skip('env not ready');
// …
}),
);
Шаги
Используйте tracera.step. Стандартные beforeEach / afterEach из @jest/globals обёрнуты: шаги внутри них попадают в Предусловие / Постусловие.
import { test, beforeEach, afterEach } from '@jest/globals';
import { tracera } from '@tracera/jest';
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 '@jest/globals';
import { tracera } from '@tracera/jest';
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'),
});
});
});