如何使用全局设置文件测试应用程序



我正在编写烧瓶应用程序,并且正在编写测试的过程中。在我的foo/__init__.py中,我读了一个配置文件:

from flask import Flask
app = Flask(__name__)
from .conf import read_config    
settings = read_config()

我在整个应用程序中都使用foo.settings作为全局对象,这使得测试非常困难。

例如:

import json
from foo import settings
from .helper import get_hosts_status
@app.route("/hosts/status")
def hosts_status():
    assert 'is_production' in settings
    data = {
        "num_hosts_up" : get_hosts_status(settings['is_production'])
    }
    return json.dumps(data)

在上述路线中,测试代码非常困难,因为settings对象是从foo导入的,从而使代码天生实现。由于settings不是该函数的参数,因此我不能简单地模拟对象。

我一直在试图重构我的应用程序,但是我似乎无法避免使用某种类型的全球范围对象。是否有一种可接受的方法来测试依赖我的settings对象等全局对象的函数,或者有没有一种方法可以使其更易于测试?

一个选项是使用烧瓶的本机app.config。

如果您的设置实际上是针对应用程序本身的,则可以在配置文件中定义多个配置(prod,test,dev),并基于从何处选择该应用程序。测试将使用测试,生产将从Env读取配置名称生产。var,默认为dev。

Miguel Grinberg的烧瓶Mega Tutorial的绘制得很好。查看此存储库(对于他的书,但他的大型教程的工作方式相同):

  • https://github.com/miguelgrinberg/flasky/blob/master/config.py-显示示例配置
  • https://github.com/miguelgrinberg/flasky/blob/master/master/tests/test_basics.py-显示测试如何调用测试配置
  • https://github.com/miguelgrinberg/flasky/blob/master/master/app/__init__.py-显示如何为部署创建应用程序本身

相关内容

  • 没有找到相关文章

最新更新