temp-env

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.

Example

``rust temp_env::with_var("MY_ENV_VAR", Some("production"), || { // Run some code whereMYENVVARset to"production"`. });

tempenv::withvars( vec![ ("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( vec![ ("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) } ); ```

How does it work?

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.

License

This project is licensed under either of

at your option.