Set environment variables temporarily.
This crate is useful for testing with different environment variables that should not interfere.
This code started as a small test helper written by [@fabian-braun] and [@nbaztec] and published by [@fabian-braun] on [StackOverflow]. [@vmx] found it useful and took the time to make it a proper crate.
``rust
temp_env::with_var("MY_ENV_VAR", Some("production"), || {
// Run some code where
MYENVVARset to
"production"`.
});
tempenv::withvars(
[
("FIRSTVAR", Some("Hello")),
("SECONDVAR", Some("World!")),
],
|| {
// Run some code where FIRST_VAR
is set to "Hello"
and SECOND_VAR
is set to
// "World!"
.
}
);
tempenv::withvars(
[
("FIRSTVAR", Some("Hello")),
("SECONDVAR", None),
],
|| {
// Run some code where FIRST_VAR
is set to "Hello"
and SECOND_VAR
is unset (even if
// it was set before)
}
);
```
Starting from version 0.3.0 you can return a value from inside the closure:
rust
let r = temp_env::with_var("MY_ENV_VAR", Some("production"), || {
let envvar = env::var("MY_ENV_VAR").unwrap();
if envvar == "production" {
true
} else {
false
}
});
This crate sets and unsets environment variables for the currently running (Rust) process.
It leverages [std::env::set_var
].
The provided functions temp_env::with_*
provide the following features:
- Avoid interference when running concurrently
- Reset previously set env variables back to their original value upon completion, also in case of panic
- Temporarily unsetting env variables
Note that the crate makes use of a singleton mutex to avoid side effects between concurrently running tests. This may impact the degree of concurrency in your test execution.
async_closure
: When enabled you can use async_with_var()
with async closures. This feature needs at least Rust version 1.64.This project is licensed under either of
at your option.