README.md

July 30, 2026 ยท View on GitHub

inline-snapshot

ci Docs pypi version Python Versions PyPI - Downloads coverage GitHub Sponsors Discord

Installation

You can install "inline-snapshot" via pip:

pip install inline-snapshot

Key Features

  • support for normal assertions: inline-snapshot can now also fix normal assertions which do not use snapshot() like:

    assert 1 + 1 == 3
    

    You can learn here more about this feature.

  • Intuitive Semantics: snapshot(x) mirrors x for easy understanding.

  • Versatile Comparison Support: Equipped with x == snapshot(...), x <= snapshot(...), x in snapshot(...), and snapshot(...)[key].

  • No CLI arguments required: you will get a nice report where you can review the snapshot changes when you run pytest (only for CPython > 3.11, you have to use --inline-snapshot=review on older versions).

  • Enhanced Control Flags: Utilize various flags for precise control of which snapshots you want to change.

  • Preserved Formatting: Retains formatting consistency with Black formatting or a custom format-command.

  • External File Storage: Store snapshots externally using external("uuid:eb1167b3-67a9-4378-bc65-c1e582e2e662.json") with support for custom file formats.

  • Seamless Pytest Integration: Integrated seamlessly with pytest for effortless testing.

  • Integration into normal functions: use snapshot_arg() to convert the arguments of your function into snapshots.

  • Customizable: code generation can be customized with @customize

  • Nested Snapshot Support: snapshots can contain other snapshots

  • Fuzzy Matching: Incorporate dirty-equals for flexible comparisons within snapshots.

  • Dynamic Snapshot Content: snapshots can contain non-constant values

  • Comprehensive Documentation: Access detailed documentation for complete guidance.

Usage

You can use snapshot() instead of the value which you want to compare with.

from inline_snapshot import snapshot


def test_something():
    assert 1548 * 18489 == snapshot()

You can now run the tests and record the correct values.

$ pytest --inline-snapshot=review
from inline_snapshot import snapshot


def test_something():
    assert 1548 * 18489 == snapshot(28620972)

The following examples show how you can use inline-snapshot in your tests. Take a look at the documentation if you want to know more.

from inline_snapshot import external, outsource, snapshot


def test_something():
    for number in range(5):
        # testing for numeric limits
        assert number <= snapshot()
        assert number >= snapshot()

    for c in "hello world":
        # test if something is part of a set
        assert c in snapshot()

    s = snapshot()

    for number in range(5):
        # create sub-snapshots at runtime
        assert s[number]["square"] == number**2
        assert s[number]["pow_of_two"] == (
            (number & (number - 1) == 0) and number != 0
        )

    assert outsource("large string\n" * 5) == snapshot()

    assert "generates\nmultiline\nstrings" == snapshot()

pytest output for pytest

snapshot_arg() can also be used for function parameters:

import subprocess as sp
import sys
from inline_snapshot import snapshot_arg


def run_python(cmd, stdout="", stderr=""):
    result = sp.run([sys.executable, "-c", cmd], capture_output=True)
    assert result.stdout.decode() == snapshot_arg(stdout)
    assert result.stderr.decode() == snapshot_arg(stderr)


def test_cmd():
    run_python("print('hello world')")

    run_python("1/0")

pytest output for pytest

Feedback

inline-snapshot provides some advanced ways to work with snapshots.

I would like to know how these features are used to further improve this small library. Let me know if you've found interesting use cases for this library via ๐•, fosstodon or in the github discussions.

Sponsors

I would like to thank my sponsors. Without them, I would not be able to invest so much time in my projects.

Gold sponsor ๐Ÿฅ‡

logfire

Bronze sponsor ๐Ÿฅ‰

openai

I have also started to offer insider features for inline-snapshot. I will only release features as insider features if they will not cause problems for you when used in an open source project. I hope sponsoring will allow me to spend more time working on open source projects. Thank you for using inline-snapshot, the future will be ๐Ÿš€.

Issues

If you encounter any problems, please report an issue along with a detailed description.

License

Distributed under the terms of the MIT license, "inline-snapshot" is free and open source software.