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