Zig library for snapshot testing.
Inspired by the insta.rs library for Rust.
Supported Zig version is 0.14.0.
First, add the library to your build.zig.zon file.
This can be done by adding the following console command:
zig fetch --save git+https://github.com/DanikVitek/sane_snap.gitThen, add the following to your build.zig file:
const sane_snap = b.dependency("sane_snap", .{
// Optional argument. Default is "src".
// Used to set the root directory of the module.
.root_module = "<path relative to the project root>"
});
const exe_mod = b.createModule(...);
exe_mod.import("sane_snap", sane_snap.module("sane_snap"));If you plan on using the CLI, one option is to connect the sane_snap_cli module as a project tool,
which can be done by adding the following to your build.zig file:
const sane_snap_cli = sane_snap.module("sane_snap_cli");
const sane_snap_cli_tool = b.addExecutable(.{
.name = "sane_snap",
.root_module = sane_snap_cli,
});
const run_sane_snap_cli_tool_cmd = b.addRunArtifact(sane_snap_cli_tool);
const run_sane_snap_cli_tool_step = b.step(
"snap",
"Run the sane_snap cli as this project's tool",
);
run_sane_snap_cli_tool_step.dependOn(&run_sane_snap_cli_tool_cmd.step);After that, all you need to to to run the CLI is to run the following command:
zig build snapconst sane_snap = @import("sane_snap");
fn add(a: i32, b: i32) i32 {
return a + b;
}
test "basic add functionality" {
try sane_snap.expectFmtSnapshot(
@src(),
null, // Set to a testcase number if you have multiple.
"{d}",
.{add(4, 7)},
);
}
test "different cases" {
const testcases = [_]struct{a: i32, b: i32}{
.{ .a = 1, .b = 2 },
.{ .a = 3, .b = 4 },
};
inline for (testcases, 0..) |case, i| {
try sane_snap.expectFmtSnapshot(
@src(),
i,
"{d}",
.{add(case.a, case.b)},
);
}
}