我目前正在寫一個簡單的燒瓶應用程序,並想測試我的配置選項正在工作。使用pytest,我該如何測試我的Flask應用程序在配置文件和沒有配置文件的配置?
這裏是我的config.py:
import logging
import logging.handlers
import os
class BaseConfig(object):
DEBUG = False
TESTING = False
...
class DevelopmentConfig(BaseConfig):
DEBUG = True
TESTING = True
...
class TestingConfig(BaseConfig):
DEBUG = False
TESTING = True
...
config = {
'development': 'app.config.DevelopmentConfig',
'testing': 'app.config.TestingConfig',
'default': 'app.config.BaseConfig'
}
def configure_app(app):
config_name = os.environ.get('FLASK_CONFIGURATION', 'default')
app.config.from_object(config[config_name])
app.config.from_pyfile('config.py', silent=True)
apikey = os.environ.get('TOKEN', None)
if apikey:
app.config['APIKEY'] = apikey
我打電話,我__init__.py
configure_app
之後我創建弗萊克對象。
app = Flask(__name__)
configure_app(app)
config.py:
APIKEY = 'filesecret'
HOOKS = {'testpush': 'scripts/test.sh'}
我想要做的是能夠使用py.test的各種配置選項單元測試。我目前的嘗試是嘗試並使用mock_open
,但配置會繼續讀取文件中的內容而不是跳過它。
class TestConfig:
def setup(self):
self.app = app.app
self.app.config['TESTING'] = True
def test_default(self, mocker):
m = mocker.mock_open(read_data='')
configure_app(self.app)
assert self.app.config['APIKEY'] == "secret"
結果測試:
def test_default(self, mocker):
m = mocker.mock_open(read_data='')
configure_app(self.app)
> assert self.app.config['APIKEY'] == "secret"
E assert 'filesecret' == 'secret'
我不知道如何做到這一點的時候,我不知道瓶中的內部。有沒有辦法僞造/模擬文件?我希望能夠編寫存在的配置文件的各種測試用例,不存在,並設置環境變量以確保優先級保持不變。