|
# @vitest/snapshot |
|
|
|
Lightweight implementation of Jest's snapshots. |
|
|
|
## Usage |
|
|
|
```js |
|
import { SnapshotClient } from '@vitest/snapshot' |
|
import { NodeSnapshotEnvironment } from '@vitest/snapshot/environment' |
|
import { SnapshotManager } from '@vitest/snapshot/manager' |
|
|
|
const client = new SnapshotClient({ |
|
// you need to provide your own equality check implementation if you use it |
|
// this function is called when `.toMatchSnapshot({ property: 1 })` is called |
|
isEqual: (received, expected) => equals(received, expected, [iterableEquality, subsetEquality]), |
|
}) |
|
|
|
// class that implements snapshot saving and reading |
|
// by default uses fs module, but you can provide your own implementation depending on the environment |
|
const environment = new NodeSnapshotEnvironment() |
|
|
|
// you need to implement this yourselves, |
|
// this depends on your runner |
|
function getCurrentFilepath() { |
|
return '/file.spec.js' |
|
} |
|
function getCurrentTestName() { |
|
return 'test1' |
|
} |
|
|
|
// example for inline snapshots, nothing is required to support regular snapshots, |
|
// just call `assert` with `isInline: false` |
|
function wrapper(received) { |
|
function __INLINE_SNAPSHOT__(inlineSnapshot, message) { |
|
client.assert({ |
|
received, |
|
message, |
|
isInline: true, |
|
inlineSnapshot, |
|
filepath: getCurrentFilepath(), |
|
name: getCurrentTestName(), |
|
}) |
|
} |
|
return { |
|
// the name is hard-coded, it should be inside another function, so Vitest can find the actual test file where it was called (parses call stack trace + 2) |
|
// you can override this behaviour in SnapshotState's `_inferInlineSnapshotStack` method by providing your own SnapshotState to SnapshotClient constructor |
|
toMatchInlineSnapshot: (...args) => __INLINE_SNAPSHOT__(...args), |
|
} |
|
} |
|
|
|
const options = { |
|
updateSnapshot: 'new', |
|
snapshotEnvironment: environment, |
|
} |
|
|
|
await client.startCurrentRun(getCurrentFilepath(), getCurrentTestName(), options) |
|
|
|
// this will save snapshot to a file which is returned by "snapshotEnvironment.resolvePath" |
|
client.assert({ |
|
received: 'some text', |
|
isInline: false, |
|
}) |
|
|
|
// uses "pretty-format", so it requires quotes |
|
// also naming is hard-coded when parsing test files |
|
wrapper('text 1').toMatchInlineSnapshot() |
|
wrapper('text 2').toMatchInlineSnapshot('"text 2"') |
|
|
|
const result = await client.finishCurrentRun() // this saves files and returns SnapshotResult |
|
|
|
// you can use manager to manage several clients |
|
const manager = new SnapshotManager(options) |
|
manager.add(result) |
|
|
|
// do something |
|
// and then read the summary |
|
|
|
console.log(manager.summary) |
|
``` |
|
|