# @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) ```