snaptdout

simple stdout snaptshot testing

Usage no npm install needed!

<script type="module">
  import snaptdout from 'https://cdn.skypack.dev/snaptdout';
</script>

README

snaptdout

snaptdout is a lightweight, simple stdout snapshot testing with great diffs

install

npm i -D snaptdout

how does it work ?

snaptdout saves a copy of stdout to a .json file equivalent to the test file name, which should be committed to git.

usage

snaptdout is a drop-in snapshot testing tool, you can use it in any testing framework by simply calling it with the expected stdout:

describe('snapshot testing', () => {
    it('should snapshot stdout', async () => {
        const stdout = ` 
        this is a 
        complicated cli
        str ing
        `
        await snap(stdout, 'snapshot name');
    });
});

all consequential tests from this file will be compared to the snapshot.

while snapshot name is optional, it is highly recommended.
if you do not provide a snapshot name, snaptdout will save the line and column of the running test as keys in the .json file.

config

you can provide config through your package.json, like so:

...
"snaptdout": {
    "snapshotsDir": "relative/to/root/project/directory"
}
...

you can also provide the config as a third paremeter. snapshot specific config overrides any global config.

const stdout = '\x1b[32;7mHEY THERE\x1[0m';
await snap(stdout, 'hey', {ignoreAnsi: true});

snapshotsDir

snapshots directory.
under this directory all snapshots files will be saved.

default: test file location.

snapshotsPrefix

snapshots file prefix.

default: ''.

ignoreAnsi

ignore ansi formatting characters (\x1b[32m || [32m).
if set to true - snaptdout will save the raw string without formatting and use that for future comparisons.

default: false.

formattedOutput

show formatted output after error message.

default: true.

features

lightweight

snaptdout has no dependencies, and a minimal footprint.

0 setup

you can simply require / import snaptdout and use it out of the box.

simple.

snaptdout uses simple .json files to store the string we refer to as a snapshot.
no binaries. nothing fancy.

great diffs

when output based tests break, you need to know exactly where.

examples

yargs cli test example

const {exec} = require('child_process');
const execute = require('util').promisify(exec);
const snap = require('snaptdout');

describe(('help test') => {
    it('should show the correct help text', async () => {
        const {stdout} = await execute('node index.js --help');
        await snap(stdout, 'help');
    });
});

ignore ansi characters for specific test