Pytest:如何在运行时更改 ~/.bashrc 令牌?

Pytest: How do I change ~/.bashrc token durning runtime?

我想在我的 bashrc 中动态更改令牌以声明预期结果。

例如:在我的 ~/.bashrc 中我设置了令牌

export GITHUB_ACCESS_TOKEN=ghp_NNNNNNNNNNNN

测试时我想设置token

export GITHUB_ACCESS_TOKEN=TEST

然后断言以检查我是否无法通过 运行 单击命令访问我的存储库:

result = runner.invoke(clicker_cli, ["git", "clone", "<url_here>"])

它没有按预期工作。我仍然可以使用我的原始令牌访问我的存储库。

上下文: 我正在使用 https://click.palletsprojects.com/en/8.0.x/ https://docs.pytest.org/en/6.2.x/monkeypatch.html

您可以设置将在运行时使用的可选 env 字典 (Mapping)。查看 invoke documentation 了解详细信息。所以下面的代码就可以了。

result = runner.invoke(
   clicker_cli, ["git", "clone", "<url_here>"], 
   env={"GITHUB_ACCESS_TOKEN": "TEST"}
)

完整示例

这是一个完整的工作示例。

import click
import os
from click.testing import CliRunner


@click.command()
@click.argument("msg")
def echo_token(msg):
    click.echo(f"{msg} {os.environ.get('GITHUB_ACCESS_TOKEN')}")


def test_echo_token(token="MY_TOKEN"):
    runner = CliRunner()
    result = runner.invoke(echo_token, ["Token is"],
             env={"GITHUB_ACCESS_TOKEN": token})
    assert result.exit_code == 0
    assert token in result.output
    print(result.output)

我们可以看到运行它正确设置了环境变量

pytest -s click_test.py
# click_test.py Token is MY_TOKEN