Files
node/benchmark/test_runner/test-options.js
T
Luan Muniz 3458dead5a benchmark: add test runner hooks and options
Add benchmarks for node:test hooks and test options.

The hooks benchmark covers before, after, beforeEach,
and afterEach, with a none mode as the baseline.

The test options benchmark covers skip and todo behavior.
This adds coverage for part of the benchmark/test_runner gaps
tracked in the issue.

Refs: https://github.com/nodejs/node/issues/55723
Signed-off-by: Luan Muniz <luan@luanmuniz.com.br>
PR-URL: https://github.com/nodejs/node/pull/63754
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
2026-08-09 07:43:52 +00:00

115 lines
2.4 KiB
JavaScript

'use strict';
const common = require('../common');
const { finished } = require('node:stream/promises');
const reporter = require('../fixtures/empty-test-reporter');
const { it } = require('node:test');
const bench = common.createBenchmark(main, {
n: [10000],
option: [
'none',
'skip',
'skip-with-message',
'skip-method',
'skip-method-with-message',
'todo',
'todo-with-message',
'todo-method',
'todo-method-with-message',
],
}, {
// We don't want to test the reporter here.
flags: ['--test-reporter=./benchmark/fixtures/empty-test-reporter.js'],
});
const noop = () => {};
const allTests = {
'none': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, noop);
}
return finished(reporter);
},
'skip': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, { skip: true }, () => {
throw new Error('This test should not run.');
});
}
return finished(reporter);
},
'skip-with-message': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, { skip: 'skip reason' }, () => {
throw new Error('This test should not run.');
});
}
return finished(reporter);
},
'skip-method': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, (t) => {
t.skip();
});
}
return finished(reporter);
},
'skip-method-with-message': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, (t) => {
t.skip('skip reason');
});
}
return finished(reporter);
},
'todo': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, { todo: true }, noop);
}
return finished(reporter);
},
'todo-with-message': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, { todo: 'todo reason' }, noop);
}
return finished(reporter);
},
'todo-method': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, (t) => {
t.todo();
});
}
return finished(reporter);
},
'todo-method-with-message': (loopAmount) => {
for (let i = 0; i < loopAmount; i++) {
it(`${i}`, (t) => {
t.todo('todo reason');
});
}
return finished(reporter);
},
};
function main({ n, option }) {
const runOption = allTests[option];
bench.start();
runOption(n).then(() => {
bench.end(n);
});
}