将值直接放入源代码的黄金大师/快照/批准测试库
项目描述
安装
您可以通过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 提供了一些处理快照的高级方法。
我想了解这些功能如何进一步改进这个小库。如果您在这个库中发现了有趣的用例,请通过 twitter、fosstodon 或在 github 讨论区 告诉我。
赞助商
我想感谢我的赞助商。没有他们,我就无法在项目上投入这么多时间。
青铜赞助商 🥉
问题
如果您遇到任何问题,请提供详细描述后 报告问题。
许可
本软件遵循 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 查看哈希值)