@dineroregnskab/node-test-teamcity
v1.0.0
Published
TeamCity reporter for the Node.js built-in test runner
Readme
node-test-teamcity
A TeamCity reporter for the Node.js built-in test runner
(node --test).
TeamCity reads test results out of a build's log as service messages — lines of the form
##teamcity[testStarted name='...']. That is how the reporters for Jest, Mocha and Vitest work.
Node's own runner has no such reporter, so this is one.
Install
npm install --save-dev @dineroregnskab/node-test-teamcityUse
Pass it as a reporter alongside a human-readable one, so the build log stays readable while TeamCity gets the structured results:
{
"scripts": {
"test": "node --test",
"ci": "node --test --test-reporter=spec --test-reporter-destination=stdout --test-reporter=@dineroregnskab/node-test-teamcity --test-reporter-destination=stdout"
}
}Keep test as the plain local command and let CI run ci; nothing about the reporter needs to
be conditional on an environment variable.
What it reports
| Runner event | Service message |
| --- | --- |
| a test passes | testStarted + testFinished with its duration |
| a test fails | testStarted + testFailed (message and stack) + testFinished |
| a test is skipped or todo | testIgnored |
| a suite finishes | nothing — see below |
A test's name carries its suite path (outer / inner / works), so two tests with the same name
in different suites stay distinct in TeamCity rather than folding into one.
Suites are deliberately not reported. The runner emits a pass or fail for a suite once its children are done; reporting that as a test of its own would double-count every test inside it.
Values are escaped to TeamCity's rules (|, ', newlines, [, ]).
Running in a container
TeamCity recognises service messages wherever they appear in a line, so this works from inside a container even when the CI step prefixes each line of output with a service name.
Test
npm test