跳转到主要内容

将值直接放入源代码的黄金大师/快照/批准测试库

项目描述

inline-snapshot

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

安装

您可以通过pip安装"inline-snapshot"。

pip install inline-snapshot

主要功能

  • 直观语义: snapshot(x)x镜像,便于理解。
  • 灵活的比较支持: 配备了x == snapshot(...)x <= snapshot(...)x in snapshot(...)snapshot(...)[key]
  • 增强的控制标志: 使用各种标志对您想要更改的快照进行精确控制。
  • 保留Black格式化: 与Black格式化保持格式一致性。
  • 外部文件存储: 使用outsource(data)在外部存储快照。
  • 无缝Pytest集成: 与pytest无缝集成,轻松测试。
  • 可定制: 代码生成可以使用@customize_repr进行定制。
  • 全面文档: 查阅详细的文档以获得完整指导。

用法

您可以使用 snapshot() 来替代您想要比较的值。

from inline_snapshot import snapshot


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

现在您可以运行测试并记录正确的值。

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


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

以下示例展示了如何在测试中使用行内快照。如果您想了解更多信息,请查看 文档

from inline_snapshot import snapshot, outsource, external


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

    for c in "hello world":
        # test if something is part of a set
        assert c in snapshot(["h", "e", "l", "o", " ", "w", "r", "d"])

    s = snapshot(
        {
            0: {"square": 0, "pow_of_two": False},
            1: {"square": 1, "pow_of_two": True},
            2: {"square": 4, "pow_of_two": True},
            3: {"square": 9, "pow_of_two": False},
            4: {"square": 16, "pow_of_two": True},
        }
    )

    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" * 1000) == snapshot(
        external("8bf10bdf2c30*.txt")
    )

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

snapshot() 也可以作为函数的参数使用

from inline_snapshot import snapshot
import subprocess as sp
import sys


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


def test_cmd():
    run_python(
        "print('hello world')",
        stdout=snapshot(
            """\
hello world
"""
        ),
        stderr=snapshot(""),
    )

    run_python(
        "1/0",
        stdout=snapshot(""),
        stderr=snapshot(
            """\
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ZeroDivisionError: division by zero
"""
        ),
    )

反馈

inline-snapshot 提供了一些处理快照的高级方法。

我想了解这些功能如何进一步改进这个小库。如果您在这个库中发现了有趣的用例,请通过 twitterfosstodon 或在 github 讨论区 告诉我。

赞助商

我想感谢我的赞助商。没有他们,我就无法在项目上投入这么多时间。

青铜赞助商 🥉

pydantic

问题

如果您遇到任何问题,请提供详细描述后 报告问题

许可

本软件遵循 MIT 许可协议,"inline-snapshot" 是免费和开源软件。

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

inline_snapshot-0.13.3.tar.gz (84.1 kB 查看哈希值)

上传时间 源代码

构建分发

inline_snapshot-0.13.3-py3-none-any.whl (31.4 kB 查看哈希值)

上传时间 Python 3

由以下支持