# multi_test

> write templated tests based on input and output data

Latest version **0.0.6** (published 2016-11-12) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install multi_test
pnpm add multi_test
yarn add multi_test
bun add multi_test
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.6 |
| Published | 2016-11-12 |
| First published | 2016-11-07 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 5 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | cogmob |
| Maintainers | cogmob |
| Keywords | - |

## Links

- npm: https://www.npmjs.com/package/multi_test
- Repository: -
- npm.io page: https://npm.io/package/multi_test

## Dependencies (5)

- [glob](https://npm.io/package/glob.md) ^7.1.1
- [tape](https://npm.io/package/tape.md) ^4.6.2
- [fs-extra](https://npm.io/package/fs-extra.md) ^1.0.0
- [glob-to-regexp](https://npm.io/package/glob-to-regexp.md) ^0.3.0
- [read-multiple-files](https://npm.io/package/read-multiple-files.md) ^1.1.1

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 0.0.6 (latest) — 2016-11-12
- 0.0.5 — 2016-11-11
- 0.0.4 — 2016-11-11
- 0.0.3 — 2016-11-11
- 0.0.2 — 2016-11-11
- 0.0.1 — 2016-11-07

## README

# multi_test

write templated tests based on input and output data

## example

```es6
const mt = require('multi_test').tape;

mt({
    path: '(a|b)*',
    test_func: (test_name, contents, tape) => {
        tape.equal('done', contents['contents']);}});
```

## usage

Multi\_test allows you to write better unit tests. For each test, store inputs
and expected outputs in separate files. Then use globbing and filtering to load
and process them with minimal effort.

Suppose you are testing the following function:

```es6
function prefix(i) {
    return 'pre-' + i;
}
```

Here are the files necessary for three tests:

```
01_none_before: ''
01_none_after: 'pre-'
02_short_before: 'a'
02_short_after: 'pre-a'
03_long_before: 'multiple\nlines'
03_long_after: 'pre-multiple\nlines'
```

Here is the code needed to perform those three tests:

```es6
mt({
    path: 'data/*before',
    make_groups: path => {
        const root = path.replace('before', '');
        return {
            before: path,
            after: root + 'after'}),
    test_func: (test_name, contents, tape) => {
        tape.equal(
            prefix(contents['before']['contents']),
            contents['after']['contents']);}});
```

A big advantage of this system, apart from brevity, is that adding further tests
does not require modifying code.

## parameters

### cwd

The starting point when searching for files. Default: '.'.

### path

A string which is pattern matched to files using globbing. This is used to find
the initial set of files before filtering. Default: '\*\*'.

### filters

An array of javascript regular expressions. Any files which match the path glob
which do not match every regex are discarded. Default: [].

### negative_filters

An array of javascript regular expressions. Any file which matches the path glob
but also matches a regex from here are discarded. Default: [].

### make_groups

A function which takes the path of a matching file after filtering, and returns
an object. The values of this object must be valid file paths.

### test_func

A function which is passed the contents of the files as specified above and the
tape testing object. It should perform a test using these.

### only

Calls the tests with the 'only' method. Therefore, this will only work if the
filters produe a unique output.

## installation


```shell
npm install --save multi_test
```

---
_Source: https://npm.io/package/multi_test · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
