Util for CLI testing: fetch stdout, stderr streams and match its data to snapshot
yarn add @qiwi/stdstream-snapshot -D
npm add @qiwi/stdstream-snapshot -D
{
"stderr": "",
"stdout": "/rules/some-rules.ts\n 2:7 error 'name'...",
"err": {
"signal": null,
"code": 1,
"killed": false
}
}
With Jest:
import {generateSnapshot} from 'stdstream-snapshot'
it('cmd output matches to snapshot', async () => {
const cmd = 'somecmd --flag=foo -b'
const result = await generateSnapshot({
cmd,
})
expect(result).toMatchSnapshot()
})
With Jasmine or another test framework with no built-it snapshot API:
import {matchSnapshot} from 'stdstream-snapshot'
it('cmd output matches to snapshot', async () => {
const cmd = 'somecmd --flag=foo -b'
const target = './test/snapshots/some-cmd-output.json'
const result = await matchSnapshot({
cmd,
target,
update: !!process.env.UPDATE_SNAPSHOT
})
expect(result).toBe(true)
})
There are several normalization steps supported out of box.
Option | Description | Default |
---|---|---|
trim |
Removes redundant spaces from both ends of strings | true |
normalizePaths |
Replaces process.cwd() prefix from any found paths in the output strings |
true |
normalizeSpaces |
Converts tabs to double spaces | true |
normalizeEncoding |
Replaces output rubbish like [8m [10m |
true |