https://github.com/socketsupply/tapzero
Zero dependency test framework
https://github.com/socketsupply/tapzero
jest tap tape test test-framework testanythingprotocol testing zero-dependency
Last synced: about 1 month ago
JSON representation
Zero dependency test framework
- Host: GitHub
- URL: https://github.com/socketsupply/tapzero
- Owner: socketsupply
- License: mit
- Created: 2020-02-20T18:58:11.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-10-02T18:57:14.000Z (over 1 year ago)
- Last Synced: 2025-03-25T09:47:33.827Z (about 2 months ago)
- Topics: jest, tap, tape, test, test-framework, testanythingprotocol, testing, zero-dependency
- Language: JavaScript
- Homepage:
- Size: 113 KB
- Stars: 33
- Watchers: 5
- Forks: 8
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# @socketsupply/tapzero
Zero dependency test framework
## Source code
The implementation is <250 loc, (<500 with comments) ( https://github.com/Raynos/tapzero/blob/master/index.js ) and very readable.
## Migrating from tape
```js
const tape = require('tape')
// Tapzero exports an object with a test function property.
const tapzero = require('@socketsupply/tapzero').test
``````js
tape('my test', (t) => {
t.equal(2, 2, 'ok')
t.end()
})// Auto ending behavior on function completion
tapzero('my test', (t) => {
t.equal(2, 2, 'ok')
// t.end() does not exist.
})
```### End automatically
Return a promise. The test will end when the promise resolves.```js
// tapzero "auto" ends async tests when the async function completes
tapzero('my cb test', async (t) => {
await new Promise((resolve) => {
t.equal(2, 2, 'ok')
setTimeout(() => {
// instead of calling t.end(), resolve a promise
resolve()
}, 10)
})
})
```### Plan the number of assertions
```js
tapzero('planning example', t => {
// this test will fail if we execute more or fewer
// than planned assertions
t.plan(2)
t.ok('hello')
t.equal(2, 2, 'two is two')
})
```### API
No aliases, smaller API surface area```js
tape('my test', (t) => {
t.equals(2, 2)
t.is(2, 2)
t.isEqual(2, 2)
})tapzero('my test', (t) => {
// tapzero does not implement any aliases, very small surface area.
t.equal(2, 2)
t.equal(2, 2)
t.equal(2, 2)
})
```## Motivation
Small library, zero dependencies
```
$ package-size ./build/src/index.js zora baretest,assert qunit tape jasmine mochapackage size minified gzipped
./build/src/index.js 8.97 KB 3.92 KB 1.53 KB
[email protected] 32.44 KB 11.65 KB 4.08 KB
[email protected],[email protected] 51.61 KB 16.48 KB 5.82 KB
[email protected] 195.83 KB 62.04 KB 20.38 KB
[email protected] 304.71 KB 101.46 KB 28.8 KB
[email protected] 413.61 KB 145.2 KB 41.07 KB
[email protected] 811.55 KB 273.07 KB 91.61 KB```
Small library, small install size.
| | @socketsupply/tapzero | baretest | zora | pta | tape |
|--------|:---------:|:----------:|:------:|:-----:|:------:|
|pkg size| [](https://packagephobia.now.sh/result?p=@socketsupply/tapzero) | [](https://packagephobia.now.sh/result?p=baretest) | [](https://packagephobia.now.sh/result?p=zora) | [](https://packagephobia.now.sh/result?p=pta) | [](https://packagephobia.now.sh/result?p=tape) |
|Min.js size| [](https://bundlephobia.com/result?p=@socketsupply/tapzero) | [](https://bundlephobia.com/result?p=baretest) | [](https://bundlephobia.com/result?p=zora) | [](https://bundlephobia.com/result?p=pta) | [](https://bundlephobia.com/result?p=tape) |
|dep count| [](https://www.npmjs.com/package/@socketsupply/tapzero) | [](https://www.npmjs.com/package/baretest) | [](https://www.npmjs.com/package/zora) | [](https://www.npmjs.com/package/pta) | [](https://www.npmjs.com/package/tape) || | Mocha | Ava | Jest | tap |
|:------:|:-------:|:-----:|:------:|:-----:|
|pkg size| [](https://packagephobia.now.sh/result?p=mocha) | [](https://packagephobia.now.sh/result?p=ava) | [](https://packagephobia.now.sh/result?p=jest) | [](https://packagephobia.now.sh/result?p=tap) |
|Min.js size| [](https://bundlephobia.com/result?p=mocha) | [](https://bundlephobia.com/result?p=ava) | [](https://bundlephobia.com/result?p=jest) | [](https://bundlephobia.com/result?p=tap) |
|dep count| [](https://www.npmjs.com/package/mocha) | [](https://www.npmjs.com/package/ava) | [](https://www.npmjs.com/package/jest) | [](https://www.npmjs.com/package/tap) |## Docs
```js
const test = require('@socketsupply/tapzero').test
```### `test(name, [fn])`
Run a single named test case. The `fn` will be called with the `t` test object.
Tests run one at a time and complete when the `fn` completes, the `fn` can be async.
### `test.only(name, fn)`
Like `test(name, fn)` except if you use `.only` this is the only test case that will run for the entire process, all other test cases using tape will be ignored.
### `test.skip(name, [fn])`
Creates a test case that will be skipped
## Harness docs
```js
const testHarness = require('@socketsupply/tapzero/harness')
```See [HARNESS.md](./HARNESS.md)