https://github.com/tool3/snaptdout
⚡︎ stdout snapshot testing
https://github.com/tool3/snaptdout
Last synced: about 1 month ago
JSON representation
⚡︎ stdout snapshot testing
- Host: GitHub
- URL: https://github.com/tool3/snaptdout
- Owner: tool3
- License: mit
- Created: 2020-12-09T08:12:10.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-10-03T07:23:05.000Z (over 4 years ago)
- Last Synced: 2025-01-26T09:27:05.335Z (over 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 354 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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`:
```javascript
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:
```json
...
"snaptdout": {
"snapshotsDir": "relative/to/root/project/directory"
}
...
```
you can also provide the config as a third paremeter.
snapshot specific config overrides any global config.
```javascript
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.
[](https://github.com/tool3/shellfie)

# examples
yargs cli test example
```javascript
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
only tests for text and spacing
```javascript
await snap('randomly formatted string', 'snapshot name', {ignoreAnsi: true});
```