Nicely Pruned Marigolds


    5.0.2 • Public • Published

    CircleCI npm Downloads Language grade: JavaScript


    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!


    npm i tap-junit

    DownloadsWeekly Downloads






    Unpacked Size

    35.9 kB

    Total Files


    Last publish


    • killparadise