Skip to main content

PyTest Snapshot Test Utility

Project description

syrupy

Logo

All Contributors Maturity badge - level 1 Stage Slack workspace

Pypi Wheel PyPI - Python Version PyPI - Downloads PyPI - License

Build Status codecov

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 == snapshot vs. 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 .ambr files. Serialization of most data types are supported, however non-sortable types such as frozenset are experimental.
  • RawSingleSnapshotSerializer: Unlike the AmberSnapshotSerializer, which groups all tests within a single test file into a singular snapshot file, the Raw Single serializer creates one .raw file per test case.
  • PNGSnapshotSerializer: An extension of the Raw Single serializer, this should be used to produce .png files.
  • SVGSnapshotSerializer: Another extension of Raw Single. This produces .svg files 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

syrupy-0.0.13.tar.gz (550.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

syrupy-0.0.13-py3-none-any.whl (22.7 kB view details)

Uploaded Python 3

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

Hashes for syrupy-0.0.13.tar.gz
Algorithm Hash digest
SHA256 e2eadba0f2d4bd8d664ee3d2c45473d2c065e77c7eb3e82a0338379c08d746e6
MD5 b30ec0a99efc6f0e71862aa5f931a483
BLAKE2b-256 626129cb198a764bd98481124671a87756ad1a858b5fb0b75b7d0446fd6926ec

See more details on using hashes here.

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

Hashes for syrupy-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 a7efaf6a16d57f1b4f4927e54981786f4a99404dede628508b90c22879eaa716
MD5 5b46b5e2aa644a26e5e03f21285a286e
BLAKE2b-256 084fdf14d11fd500e396ee8e91287168f15d16f0cbc9492ef5e71d05cebd1178

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page