我在db.db.Db下有以下模块,它位于Flask应用程序中。它使用app.config变量连接数据库,在编写单元测试用例时如何覆盖这些设置?如何从Flask获得具有虚拟配置变量的不同应用程序上下文?
import psycopg2
class Db(object):
def __init__(self):
import app
conn_string = "host='{}' port='{}' dbname='{}' user='{}' password='{}'".format(app.app.config['DB_HOST'], \
app.app.config['DB_PORT'], app.app.config['DB_NAME'], app.app.config['DB_USER'], \
app.app.config['DB_PASSWORD'])
self.conn = psycopg2.connect(conn_string)
def __del__(self):
self.conn.close()
答案 0 :(得分:0)
常见模式是create your app with a function,而不是在导入时创建单个应用实例。
如果您只是在请求上下文中访问数据库,则可以使用flask.current_app
来访问当前的应用程序上下文。
例如:
from flask import current_app
import psycopg2
class Db(object):
def __init__(self):
conn_string = "host='{}' port='{}' dbname='{}' user='{}' password='{}'".format(current_app.config['DB_HOST'], \
current_app.config['DB_PORT'], current_app.config['DB_NAME'], current_app.config['DB_USER'], \
current_app.config['DB_PASSWORD'])
self.conn = psycopg2.connect(conn_string)
def __del__(self):
self.conn.close()
然后你的测试可以创建自己的应用程序,并将配置值更改为他们喜欢的任何内容。