Expand description
Simple golden file testing for Rust.
goldie::assert!(text);§🚀 Getting started
Add goldie to your project as a dev dependency.
cargo add goldie --devIn your test function assert the contents using goldie::assert!. The
golden filename will be automatically determined based on the test file and
test function name. Run tests with GOLDIE_UPDATE=1 to automatically update
golden files.
#[test]
fn example() {
let text = { /* ... run the test ... */ };
// assert that the contents of ./testdata/example.golden
// are equal to `text`
goldie::assert!(text)
}§Usage
§Golden file location
By default golden files are stored in a testdata directory next to the
source test module. For example if your test is in src/a/tests.rs then
the golden files will be stored in src/a/testdata/. This is configurable
by using the Builder. For example:
goldie::new!()
.name("custom_name")
.build()
.assert(text);§assert!
Compares the provided value with the contents of a golden file. The value
must implement Display. If they do not match the test will fail. If the
environment variable GOLDIE_UPDATE=1 is set then the golden file will be
updated.
§assert_alt!
Compares the provided value with the contents of a golden file. The value
must implement Display. The alternate formatting ({:#}) is used. If they
do not match the test will fail. If the environment variable
GOLDIE_UPDATE=1 is set then the golden file will be updated.
§assert_debug!
Compares the provided value with the contents of a golden file. The value
must implement Debug. If they do not match the test will fail. If the
environment variable GOLDIE_UPDATE=1 is set then the golden file will be
updated.
§assert_debug_alt!
Compares the provided value with the contents of a golden file. The value
must implement Debug. The alternate formatting ({:#?}) is used. If they
do not match the test will fail. If the environment variable
GOLDIE_UPDATE=1 is set then the golden file will be updated.
§assert_json!
Golden files containing JSON data are supported using
goldie::assert_json!. Something implementing serde::Serialize needs to
be provided as the actual value. The golden file will be pretty-printed
JSON. You can use GOLDIE_UPDATE=1 to automatically update JSON golden
files.
#[test]
fn example() {
#[derive(Serialize)]
struct User {
name: &'static str,
surname: &'static str,
}
let u = User { name: "Steve", surname: "Harrington" };
// assert that the contents of ./testdata/example.golden
// are equal to the pretty-printed JSON representation of `u`
goldie::assert_json!(&u);
}§assert_template!
Templated golden files are also supported using goldie::assert_template!.
Something implementing serde::Serialize needs to be provided as context in
order to render the template. Values are rendered using
upon e.g. {{ value.field }}. You
cannot use GOLDIE_UPDATE=1 to automatically update templated golden
files.
#[test]
fn example() {
let text = { /* ... run the test ... */ };
// assert that the contents of ./testdata/example.golden
// are equal to `text` after rendering with `ctx`.
let ctx = upon::value!{ value: "Hello World!" };
goldie::assert_template!(&ctx, text)
}Macros§
- assert
- Assert the golden file matches the display output
"{}" - assert_
alt - Assert the golden file matches the alternate display output
"{:#}". - assert_
debug - Assert the golden file matches the debug output
"{:?}" - assert_
debug_ alt - Assert the golden file matches the alternate debug output
"{:#?}". - assert_
json - Assert the JSON golden file matches.
- assert_
template - Assert the templated golden file matches.