Нативный Test Runner, появившийся в Node.js 18+, пока уступает по возможностям:
Пример сравнения:
// Jest
test('should work', () => {
expect(sum(1, 2)).toBe(3);
});
// Node.js Test Runner
test('should work', (t) => {
t.equal(sum(1, 2), 3);
});
Хотя Test Runner поддерживает параллельное выполнение, есть нюансы:
Проблемные моменты:
Пример ограничений:
beforeEach(() => {
// Работает только на уровне test suite
});
Требуется дополнительная настройка:
node --loader ts-node/esm test.js
Комбинация с assert/strict
и util
:
import assert from 'node:assert/strict';
import { mock } from 'node:test';
test('mock test', () => {
const fn = mock.fn();
fn();
assert.equal(fn.mock.calls.length, 1);
});
Создание своих репортеров через TestEvent
:
import { test, TestEvent } from 'node:test';
const reporter = new TestEvent();
reporter.on('test:finish', (data) => {
console.log(`Test ${data.name} finished`);
});
Использование c8:
npx c8 node --test
Метод | Операций/сек | Память |
---|---|---|
console.log | 10,000 | Низкая |
Winston (JSON) | 7,000 | Средняя |
Pino | 20,000 | Низкая |
Bunyan | 5,000 | Средняя |
Планируемые улучшения:
Нативный Test Runner в Node.js - это перспективный, но пока сыроватый инструмент. Он подходит для базового тестирования, но для сложных проектов с большим количеством тестов пока лучше использовать Jest или Mocha. Основные проблемы - ограниченная функциональность, сложности с параллельным выполнением и неидеальная производительность. Однако для простых проектов и встроенных в Node.js решений он может быть хорошим выбором.