【发布时间】:2021-11-10 17:07:25
【问题描述】:
在我的项目中,我有一个 Settings 类:
config.py
class Settings(BaseSettings):
DEBUG: bool = os.getenv("DEBUG", 'False')
TOKEN_KEY: str = os.getenv("TOKEN_KEY", '')
TOKEN_PASSWORD: str = os.getenv("TOKEN_PASSWORD", '')
@lru_cache()
def get_settings():
return Settings()
我正在以这样的方法使用它:
helpers.py
def generate_new_token(user: User) -> str:
settings = get_settings()
private_key = settings.TOKEN_KEY
token_password = settings.TOKEN_PASSWORD
# Do something
我已经创建了这两个装置:
conftest.py
@pytest.fixture
def get_settings():
return Settings(DEBUG=True, TOKEN_KEY="SOME_FAKE_TOKEN_KEY", TOKEN_PASSWORD='')
@pytest.fixture
def get_user():
return User()
现在我想用fixtures返回的值来测试generate_new_token方法:
test_helpers.py
def test_generate_new_token(get_user, get_settings):
generate_new_token(user=get_user)
在这种情况下,get_settings 中的 TOKEN_KEY 值应该是 SOME_FAKE_TOKEN_KEY,但它仍然是空的。
当我调试代码时,我可以看到它将值从 get_settings 夹具传递到 test_generate_new_token ,但随后 generate_new_token 调用主要的 get_settings 方法并且不使用夹具中的 get_settings 值作为settings 值。
我知道如果我像这样将settings 作为参数传递给generate_new_token:
def generate_new_token(user: DexterUser, settings: Settings) -> str:
然后我可以将夹具从测试函数传递给它:
def test_generate_new_token(get_user, get_settings):
generate_new_token(user=get_user, settings=get_settings)
但是有没有办法将fixture传递给main函数而不必将它添加到它的参数中?
【问题讨论】: