5.0.3 • Public • Published

GitHub Actions Workflow Status npm Downloads


Silly small, silly easy junit output formatter for tap.

Works with tape and other tap based tests just pipe it into tap-junit


  • -c, --classname - The name you want to apply to the testsuite element (if not set no name is given to the output testsuite)
  • -o, --output - designate where you want the .xml results to output
    • If you do not specify an output then results will be displayed within the terminal
  • -n, --name - value provided will be the name of the output.xml file, otherwise defaults to tap.xml
  • -s, --suite - sets the main test suite name defaults to Tap-Junit if not passed
  • -v, --version - displays the current tap-junit version
  • -i, --input - Specify a specific tap txt input file to transform
  • -p, --pretty - Specify if you want the output xml to be prettified or not this is false by default


npm i -D tap-junit


tape test/*.js | tap-junit --output output/test

node test.js | ./node_modules/tap-junit/bin/tap-junit --output output/test

tap-junit -o output/tests -n nontape < src/test/non-tape.tap

tape tests/thing.js | tap-junit > output/thing.xml

tap-junit -i tap.txt -s suite-name

You can now use custom extensions (in version 3.1.0+) simply add the extension to the end of your file name. If none is provided tap-junit will still default to .xml

tape test/*.js | tap-junit -o output/tests -n tape.xuni

The above will create a file called tape.xuni in the output/tests directory with the results inside.


Tap-Junit currently follows this spec on junit syntax/layout

<testsuites tests="4" name="Tap-Junit" failures="2">
  <testsuite tests="4" failures="2" skipped="1">
    <testcase id="1" name="test is equal"/>
    <testcase id="2" name="test skip extra # SKIP">
    <testcase id="3" name="should not be equal"/>
    <testcase id="4" name="should be equal"/>


So Tap Junit takes a tape style assumption when it comes to comments. That being, when a comment appears before a test (because that's how tape labels its tap output) it will be registered as a comment for that test, but the issue here is that you may lose placed comments in your tap files.

At the moment, I'm still trying to figure out a decent way to handle comments and record them. Keep this in mind that only a single comment before each test will currently be recorded for a system-out tag.

If you have ideas on how to better handle this, don't hesitate to reach out!

Package Sidebar


npm i tap-junit

Weekly Downloads






Unpacked Size

38.4 kB

Total Files


Last publish


  • killparadise