PyTest Snapshot Test Utility
Project description
syrupy
Overview
Syrupy is a pytest snapshot plugin. It enables developers to write tests which assert immutability of computed results.
Motivation
The most popular snapshot test plugin compatible with pytest has some core limitations which this package attempts to address by upholding some keys values:
- Extensible: If a particular data type is not supported, users should be able to easily and quickly add support.
- Idiomatic: Snapshot testing should fit naturally among other tests cases in pytest, e.g.
assert x == snapshotvs.snapshot.assert_match(x). - Soundness: Snapshot tests should uncover even the most minute issues. Unlike other snapshot libraries, Syrupy will fail a test suite if a snapshot does not exist, not just on snapshot differences.
Installation
python -m pip install syrupy
Usage
Basic Usage
In a pytest test file test_file.py:
def test_foo(snapshot):
actual = "Some computed value!"
assert actual == snapshot
when you run pytest, the above test should fail due to a missing snapshot. Re-run pytest with the update snapshots flag like so:
pytest --snapshot-update
A snapshot file should be generated under a __snapshots__ directory in the same directory as test_file.py. The __snapshots__ directory and all its children should be committed along with your test code.
Options
These are the cli options exposed to pytest by the plugin.
| Option | Description |
|---|---|
--snapshot-update |
When supplied updates existing snapshots of any run tests, as well as deleting unused and generating new snapshots. |
--snapshot-warn-unused |
Syrupy default behaviour is to fail the test session when there any unused snapshots. This instructs the plugin not to fail. |
Serializers
Syrupy comes with a few built-in serializers for you to choose from. You should also feel free to extend the AbstractSnapshotSerializer if your project has a need not captured by one our built-ins.
AmberSnapshotSerializer: This is the default serializer which generates.ambrfiles. Serialization of most data types are supported, however non-sortable types such as frozenset are experimental.RawSingleSnapshotSerializer: Unlike theAmberSnapshotSerializer, which groups all tests within a single test file into a singular snapshot file, the Raw Single serializer creates one.rawfile per test case.PNGSnapshotSerializer: An extension of the Raw Single serializer, this should be used to produce.pngfiles.SVGSnapshotSerializer: Another extension of Raw Single. This produces.svgfiles from an svg string.
Advanced Usage, Plugin Support
import pytest
@pytest.fixture
def snapshot_custom(snapshot):
return snapshot.with_class(
serializer_class=CustomSerializerClass,
)
def test_image(snapshot_custom):
actual = "..."
assert actual == snapshot_custom
CustomSerializerClass should extend syrupy.serializers.base.AbstractSnapshotSerializer.
Uninstalling
pip uninstall syrupy
Contributing
Feel free to open a PR. This project is still in a very early stage, and we're still figuring out what direction we want to move towards.
To develop locally, clone this repository and run . script/bootstrap to install test dependencies. You can then use invoke --list to see available commands.
See contributing guide
Contributors
Noah 🚇 🤔 💻 📖 ⚠️ |
Emmanuel Ogbizi 💻 🎨 🚇 📖 ⚠️ |
This section is automatically generated via tagging the all-contributors bot in a PR:
@all-contributors please add <username> for <contribution type>
License
Syrupy is licensed under Apache License Version 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file syrupy-0.0.13.tar.gz.
File metadata
- Download URL: syrupy-0.0.13.tar.gz
- Upload date:
- Size: 550.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2eadba0f2d4bd8d664ee3d2c45473d2c065e77c7eb3e82a0338379c08d746e6
|
|
| MD5 |
b30ec0a99efc6f0e71862aa5f931a483
|
|
| BLAKE2b-256 |
626129cb198a764bd98481124671a87756ad1a858b5fb0b75b7d0446fd6926ec
|
File details
Details for the file syrupy-0.0.13-py3-none-any.whl.
File metadata
- Download URL: syrupy-0.0.13-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7efaf6a16d57f1b4f4927e54981786f4a99404dede628508b90c22879eaa716
|
|
| MD5 |
5b46b5e2aa644a26e5e03f21285a286e
|
|
| BLAKE2b-256 |
084fdf14d11fd500e396ee8e91287168f15d16f0cbc9492ef5e71d05cebd1178
|