Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

tap-arc

architect21.9kApache-2.01.3.2

spec-like TAP reporter

test, tap, spec, tap-spec, tape, reporter

readme

tap-arc 📋

A small TAP reporter with spec-like output, streaming, and failure diffing.
tap-arc on npmjs.org »

Contents: InstallDevelopmentFAQ

Objectives

  • minimal, informative spec-like output for all assertion types
  • helpful diffing for failures
  • shallow graph of maintained dependencies

tap-arc output screen shot

Installation and Usage

Compatible with Node.js v16+ -- v14 also works but is not recommended.

Save tap-arc as a development dependency:

npm i -D tap-arc

Simply pipe tap output to tap-arc.
Example npm test script:

// package.json
"scripts": {
  "test": "tape test/**/*.js | tap-arc"
}

[!IMPORTANT]
💁 tap-arc will format output from any tap reporter. tape is our favorite and was used for testing.

tap-arc --help

Usage:
  tap-arc <options>

Parses TAP data from stdin, and outputs a "spec-like" formatted result.

Options:

  -v | --verbose
    Output full stack trace, TAP version, and plan

  -p | --pessimistic | --bail
    Immediately exit upon encountering a failure
    example: tap-arc -p

  --no-diff
    Do not show diff for failed assertions
    example: tap-arc --no-diff

  --no-color
    Output without ANSI escape sequences for colors
    example: tap-arc --no-color

  --fail-bad-count
    Fail when the number of assertions parsed does not match the plan
    example: tap-arc --fail-bad-count

Development

When building tap-arc, it's helpful to try various TAP outputs. See package.json "scripts" for useful "tap-arc.*" commands to test passing and failing TAP.

npm run tap-arc.simple # used to create the screen shot above

Dev Tips

  1. To see previous exit code, run:
echo $?

Testing

Primarily, tap-arc is tested to output the correct exit code based on your test suite's TAP output.

Testing could be improved by unit testing the printer and diff maker.

FAQ

<summary>"Expected n tests, but found < n"</summary>

What happened?
✅ The TAP parser found zero failing tests
✅ The final tally from the raw TAP shows n of n passed
🤨 But the TAP plan called for more tests than were found, counted, and parsed.

💁‍♀️ Currently, when this case is detected, tap-arc will exit with a successful status code.
This can be overridden with the --fail-bad-count flag.

Why, though?
This has been observed specifically on Windows, where the TAP output is buffered to another stream and not piped to tap-arc.
Libraries like mock-fs tinker with stdout and subsequent TAP output is lost. Try closing those helpers before making an assertion that generates TAP.

<summary>"0 tests found" fails the suite?</summary>

Yes. At least one passing test is required to pass the suite.
This helps ensures there wasn't a silent, catastrophic failure in the test suite.

<summary>Why does tap-arc get to decide these things?</summary>

tap-arc is responsible for the test suite's exit code. If your entire CI stack is piped to a reporter, it's an important job. So tap-arc is a bit skeptical by default to help ensure your suite is passing.

If you'd like to see different behavior from tap-arc, please open an issue or PR. We'd love to hear your use case.

Credit & Inspiration

  • tap-spec ol' reliable, but a bit stale and vulnerable
  • tap-difflet inspired output and diffing, also vulnerable

changelog

tap-arc Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.3.0] - 2024-07-29

Added character highlighting to diffs. Thanks @Munawwar!

  • improved

[1.2.2] - 2023-11-01

Fixed

  • verbose "Plan: " statement bug fix

[1.2.0] - 2023-10-27

Changed

  • replace tap-parser with tap-reader for simpler i/o, shallower dependency graph, and smaller disk footprint
  • single-line diffs now output to 2 lines: "Actual" and "Expected" for easier reading

[1.1.0] - 2023-10-17

Changed

  • diffing has been reimplemented to be simpler and optional

Added

  • --no-diff option to disable diffing

[1.0.1] - 2023-09-19

Changed

  • improve tap error handling when "no plan found"
  • improve runtime error handling and reporting

[1.0.0] - 2023-09-13

A large refactor with updated dependencies that targets very similar output of v0.3.0+. Drastically simplified testing.

Changed

  • Ouput formatting and colors are more readable for red-green colorblind folks (like myself!)
  • Suites with all passing tests but "bad counts" will now PASS. Override with --fail-bad-count. See the FAQ in README.
  • ⚠️ tap-arc will only exit(1) when test count is 0 if the results plan comment also contains "no tests found" -- unlikely to affect most test reporting pipelines.
  • CI for this library on Windows improved.

[0.4.0] - 2023-08-21

Fixed

  • dep vulnerabilies

[0.3.6] - 2023-08-18

Fixed

  • dependency vulnerabilities in json5

Changed

  • update other dependencies

Notes

  • v1 (a rewrite) has been in progress for a while. shifts in the Node TAP ecosystem are settling.
  • snapshot tests have been disabled. this approach, while super accurate, is unmaintainable.

[0.3.5] - 2022-07-11

Fixed

  • correctly describe failure then expected error message does not match actual thrown error. #29

Changed

  • explicitly pin strip-ansi to v6.0.1

[0.3.4] - 2022-03-30

Changed

  • when total test count is 0, exit with code 1. #26

[0.3.3] - 2022-03-25

Fixed

  • correctly display multi-(c)hunk diffs

Removed

  • verbose option no longer affects diff print

[0.3.2] - 2022-03-24

Added

  • --verbose prints full diff as reported by tcompare

Fixed

  • actual vs expected colors in equality assertions

[0.3.1] - 2022-03-24

Changed

  • use strict instead of match from tcompare for more verbose diffs

Fixed

  • correctly handle when shallow equality TAP output cannot be diffed

[0.3.0] - 2022-03-23

Fixed

  • color corrections #18

Changed

  • tcompare for improved failure diffing #2

Removed

  • --padding option
  • --indent option

[0.2.0] - 2022-03-22

Changed

  • deterministically stringify JSON for diffing, thanks @mixmix

Added

  • --no-color option to prevent colorized output with ANSI escape sequences

[0.1.0] - 2021-11-20

Added