Skip to content

rossmacarthur/goldie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goldie

Crates.io Version Docs.rs Latest Build Status

Simple golden file testing for Rust.

goldie::assert!(text);

πŸš€ Getting started

Add goldie to your project as a dev dependency.

cargo add goldie --dev

In 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:

# let text = "";
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)
}

License

This project is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.

About

🌟 Simple golden file testing for Rust

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages