https://github.com/tapjs/libtap
A Test-Anything-Protocol library for JavaScript
https://github.com/tapjs/libtap
Last synced: 8 months ago
JSON representation
A Test-Anything-Protocol library for JavaScript
- Host: GitHub
- URL: https://github.com/tapjs/libtap
- Owner: tapjs
- License: isc
- Created: 2019-12-13T17:18:11.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2023-10-10T17:29:50.000Z (about 2 years ago)
- Last Synced: 2025-04-23T22:05:57.450Z (8 months ago)
- Language: JavaScript
- Size: 8.67 MB
- Stars: 4
- Watchers: 3
- Forks: 12
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# libtap
A TAP test library for
Node.js.
## `libtap` vs `tap`
`tap` extends this module and provides many other nice features. Generally
you should be using `require('tap')` instead of `require('libtap')`. In some
edge cases it can be appropriate to use `libtap` directly.
* Install size is important - `libtap` has significantly less dependencies.
* Your tests are suspectable to transformations or other environmental changes.
`tap` does things that are useful by default, if this causes problems for your
code you may wish to go lower level.
### Recursive rmdir
Some parts of `libtap` require recursive rmdir functions. In Node.js 12.10.0+
this is provided by the Node.js core `fs` module. For older versions of Node.js you
must set compatible functions:
```js
const rimraf = require('rimraf')
const settings = require('libtap/settings')
settings.rmdirRecursiveSync = dir => rimraf.sync(dir, {glob: false})
settings.rmdirRecursive = (dir, cb) => rimraf(dir, {glob: false}, cb)
```
This is handled by `tap` so only direct users of `libtap` who need to support older
versions of Node.js need to worry about this.
It is not considered semver-major for a libtap function to use recursive rmdir where
it previously did not. If you test on older versions of Node.js then you must ensure
a user-space implementation is available even if it is not currently needed.
## Environmental changes still in place
* signal-exit is run
* async-domain-hook is run
* process.stdout.emit is monkey-patched to swallow EPIPE errors
* process.reallyExit and process.exit are monkey-patched
* Handlers are added to process `beforeexit` and `exit` events
These all have an effect on the environment and may be undesirable in some edge cases.
Should any/all of these be opt-out or even opt-in? The goal is to be able to create
functional tests using `require('libtap')`.