#env-var #manipulate #utils #manager #initial #set

env-test-util

Just a simple tool to manipulate environment variable in tests

3 releases (stable)

1.0.1 Nov 5, 2020
0.1.0 Nov 5, 2020

#480 in Testing

Download history 447/week @ 2024-03-14 624/week @ 2024-03-21 731/week @ 2024-03-28 492/week @ 2024-04-04 363/week @ 2024-04-11 467/week @ 2024-04-18 446/week @ 2024-04-25 563/week @ 2024-05-02 521/week @ 2024-05-09 724/week @ 2024-05-16 444/week @ 2024-05-23 329/week @ 2024-05-30 773/week @ 2024-06-06 645/week @ 2024-06-13 497/week @ 2024-06-20 501/week @ 2024-06-27

2,470 downloads per month
Used in chanoma

MIT/Apache

8KB
56 lines

Env test util

Crates.io Crates.io

Build Status codecov

Just a simple tool to manipulate environment variable in tests.

Usage

When initialising the variable manager with new, the actual content will be removed and stored in initial_value. You can then set a temporary value using the method with. The environment variable will then be reset to it's initial value when it will be dropped.

Examples

use env_test_util::TempEnvVar;

std::env::set_var("MY_VARIABLE", "ORIGINAL"); // set the variable to "ORIGINAL"
let variable = TempEnvVar::new("MY_VARIABLE"); // read the variable and stores it
assert_eq!(std::env::var("MY_VARIABLE").ok(), None);
let variable = variable.with("NEW_CONTENT"); // set the environment variable with a new content
assert_eq!(std::env::var("MY_VARIABLE").ok(), Some("NEW_CONTENT".into()));
drop(variable);
assert_eq!(std::env::var("MY_VARIABLE").ok(), Some("ORIGINAL".into()));

Don't forget to assign the variable in your tests, otherwise the drop function will be called right away

use env_test_util::TempEnvVar;

std::env::set_var("MY_VARIABLE", "ORIGINAL"); // set the variable to "ORIGINAL"
TempEnvVar::new("MY_VARIABLE").with("SOMETHING_ELSE"); // read the variable and stores it
assert_eq!(std::env::var("MY_VARIABLE").ok(), Some("ORIGINAL".into()));
let _variable = TempEnvVar::new("MY_VARIABLE").with("SOMETHING_ELSE"); // Instead, store it in a variable
assert_eq!(std::env::var("MY_VARIABLE").ok(), Some("SOMETHING_ELSE".into()));

Real life example

#[test]
fn testing_conntection_database() {
    let _original_url = TempEnvVar::new("DATABASE_URL").with("postgres://wrong-url");
    let connection = Database::connect(); // something that reads the environment variable
    assert!(connection.is_err());
}

No runtime deps