What is jest-specific-snapshot?
The jest-specific-snapshot package allows you to create and manage Jest snapshots in a more granular and specific manner. It provides functionality to create snapshots for specific tests and manage them independently, which can be useful for large test suites or when you need more control over your snapshot testing.
What are jest-specific-snapshot's main functionalities?
Creating a specific snapshot
This feature allows you to create a snapshot for a specific test and store it in a specified file. This can be useful for organizing snapshots and keeping them separate from other tests.
const { toMatchSpecificSnapshot } = require('jest-specific-snapshot');
expect.extend({ toMatchSpecificSnapshot });
test('example test', () => {
const data = { key: 'value' };
expect(data).toMatchSpecificSnapshot('./__snapshots__/example.snap');
});
Updating a specific snapshot
This feature allows you to update an existing snapshot for a specific test. If the snapshot already exists, it will be updated with the new data provided in the test.
const { toMatchSpecificSnapshot } = require('jest-specific-snapshot');
expect.extend({ toMatchSpecificSnapshot });
test('example test', () => {
const data = { key: 'new value' };
expect(data).toMatchSpecificSnapshot('./__snapshots__/example.snap');
});
Other packages similar to jest-specific-snapshot
jest
Jest is a comprehensive testing framework that includes built-in snapshot testing capabilities. While it does not offer the same level of granularity as jest-specific-snapshot, it is widely used and provides a robust set of features for testing JavaScript applications.
ava
AVA is a test runner that supports snapshot testing through the 'ava' package. It is known for its simplicity and speed, but it does not offer the same level of control over individual snapshots as jest-specific-snapshot.
mocha
Mocha is a flexible testing framework that can be extended with various plugins to support snapshot testing. While it requires additional configuration and plugins to achieve similar functionality, it is a popular choice for developers who need a customizable testing solution.
Jest Specific Snapshot
Jest matcher for multiple snapshot files per test
You can read about the implementation here
Installation
npm i -D jest-specific-snapshot
Example
const path = require('path');
require('jest-specific-snapshot');
test('test', () => {
const pathToSnap = path.resolve(process.cwd(), './example/specific/dir/my.shot');
expect(100).toMatchSpecificSnapshot(pathToSnap);
expect(14).toMatchSpecificSnapshot('./specific/dir/my.shot');
expect(19).toMatchSpecificSnapshot('./specific/another_dir/another.shot');
});
With Custom Serializer
const addSerializer = require('jest-specific-snapshot').addSerializer;
addSerializer();
test('test', () => {
expect().toMatchSpecificSnapshot(
'./specific/custom_serializer/test.shot'
);
});
Extend toMatchSpecificSnapshot
const toMatchSpecificSnapshot = require('jest-specific-snapshot').toMatchSpecificSnapshot;
expect.extend({
toMatchDecoratedSpecificSnapshot(received, snapshotFile) {
const data = doSomeThing(received);
return toMatchSpecificSnapshot.call(this, data, snapshotFile);
},
});
Limitations
- Snapshot files should have an extension other than
.snap
, since it conflicts with jest. - In order to handle the
--updateSnapshot
(-u
) parameter provided from CLI, there is an abuse of the SnapshotState._updateSnapshot
private field. TBD - try to use the globalConfig
to get this state. .toMatchSpecificSnapshot
does ignore a custom serializers strategy. In order to support custom serializers, you should use the addSerializer
method explicitly.