我正在try 在一些测试中设置一些环境变量来驱动Django项目的配置,这样我就可以模拟一些值,并使断言更容易和明确.
我想用一个文件的名称设置一个环境变量,该文件存储一些配置,如果设置了该变量并且该文件存在,则加载该配置.即:
# proj.settings.py
CONFIG = None
if _filename := os.environ.get('FILE_PATH', None):
with open(_filename) as f:
CONFIG = json.load(f)
我try 了一个设置环境变量的装置(请参见set_env
),因此我的测试如下所示:
# some_app.tests.test_settings.py
import os
@fixture
def data_raw():
return dict(
foo="bar"
)
@fixture
def data_file(data_raw):
with NamedTemporaryFile(mode="w+") as f:
json.dump(data_raw, f)
yield f.name
@fixture
def set_env(data_file):
os.environ['FILE_PATH'] = data_file
def test_it_loads_data(set_env, data_raw, settings):
assert settings.CONFIG == data_raw
但是set_env
不会在Django的配置之前执行,所以CONFIG
永远不会被设置.