9个版本

0.3.6 2023年9月24日
0.3.5 2023年9月1日
0.3.4 2023年4月19日
0.3.3 2023年3月22日
0.1.0 2021年12月3日

#23 in 测试

Download history 23953/week @ 2024-04-15 26640/week @ 2024-04-22 23183/week @ 2024-04-29 28131/week @ 2024-05-06 33699/week @ 2024-05-13 32503/week @ 2024-05-20 26747/week @ 2024-05-27 26282/week @ 2024-06-03 30299/week @ 2024-06-10 31923/week @ 2024-06-17 30370/week @ 2024-06-24 25583/week @ 2024-07-01 32421/week @ 2024-07-08 29391/week @ 2024-07-15 32280/week @ 2024-07-22 30338/week @ 2024-07-29

125,787 每月下载量
用于 84 个Crate(68个直接使用)

MIT/Apache

26KB
415 代码行

temp-env

临时设置环境变量。

此Crate对于使用不应相互干扰的不同环境变量进行测试非常有用。

此代码最初是由 @fabian-braun@nbaztec 编写的一个小型测试辅助工具,并由 @fabian-braunStackOverflow 上发布。 @vmx 认为此工具很有用,并花费时间将其制作成一个合适的Crate。

示例

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


temp_env::with_vars(
    [
        ("FIRST_VAR", Some("Hello")),
        ("SECOND_VAR", Some("World!")),
    ],
    || {
        // Run some code where `FIRST_VAR` is set to `"Hello"` and `SECOND_VAR` is set to
        // `"World!"`.
    }
);

temp_env::with_vars(
    [
        ("FIRST_VAR", Some("Hello")),
        ("SECOND_VAR", None),
    ],
    || {
        // Run some code where `FIRST_VAR` is set to `"Hello"` and `SECOND_VAR` is unset (even if
        // it was set before)
    }
);

从版本0.3.0开始,您可以从闭包内部返回一个值

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
    }
});

它是如何工作的?

此Crate为当前运行的(Rust)进程设置和取消设置环境变量。它利用 std::env::set_var

提供的函数 temp_env::with_* 提供以下功能

  • 避免在并行运行时相互干扰
  • 在完成时将之前设置的环境变量重置为其原始值,即使在panic的情况下也是如此
  • 临时取消设置环境变量

请注意,此Crate使用单例互斥锁来避免并行运行的测试之间的副作用。这可能会影响您的测试执行中的并发程度。

特性

  • async_closure:当启用时,您可以使用 async_with_var() 与异步闭包一起使用。此特性需要至少Rust版本1.64。

许可证

此项目根据以下许可证之一授权

由您选择。

依赖项

~0.4–6MB
~13K SLoC