gpt4 book ai didi

python - 在 Flask 中设置用于测试的数据库

转载 作者:行者123 更新时间:2023-11-28 21:54:55 28 4
gpt4 key购买 nike

我正在开发我的第一个 Flask 应用程序。这是我的副业,所以我专注于良好的实践和设计,慢慢来。我有点坚持测试 - 我在文档和 SO 上找到了一些示例,但它们要么不适用于我的应用程序,要么看起来不像 Pythonic/精心设计。

相关的代码是:

# application module __init__.py
def create_app(config):
app = Flask(__name__)
app.config.from_object('config.%s' % config.title())
return app

config = os.getenv('CONFIG', 'development')
app = create_app(config)
db = SQLAlchemy(app)

# config.py
class Testing(Base):
TESTING = True
SQLALCHEMY_DATABASE_URI = \
'sqlite:///' + os.path.join(_basedir, 'testing.sqlite')

# models.py
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(60), unique=True, nullable=False)
password_hash = db.Column(db.String(60), nullable=False)

# testing.py
class TestCase(unittest.TestCase):

def setUp(self):
self.app = create_app('testing')
# TODO: create connection to testing db

def tearDown(self):
# TODO: abort transaction
pass

问题是:如何实现 setUptearDown 以便在我的测试中我可以使用我的模型和连接来测试数据库?如果我只导入 db,它将在开发数据库上运行。

如果有帮助的话,我不需要从头开始创建测试数据库,我使用 Flask-Migrate 并且测试可以假定测试数据库已初始化且为空。

欢迎任何评论,如果我的设计有缺陷,我不介意重构。

最佳答案

看起来就像您应该能够运行CONFIG=Testing python -m unittest discover 并且一切正常。您可能想要更改的唯一想法是,不要在测试中调用 create_app,只需从 __init__.py 导入它:

# testing.py
from . import config, db

class TestCase(unittest.TestCase):

def setUp(self):
self.app = create_app(config)
# db is properly set up to use the testing config
# but any *changes* you make to the db object
# (e. g. monkey-patching) will persist between tests
db.create_all()

def tearDown(self):
db.session.remove()
db.drop_all()

参见 here举个例子。

关于python - 在 Flask 中设置用于测试的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399930/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com