我有一个使用 SqlAlchemy 在 Flask 上运行的 Web 应用程序,用于审核新闻,它有一些 api 方法来处理审核请求,例如批准、拒绝当前选定的新闻、列出它们等。
我想为此方法编写单元测试,并让它们工作,但我不明白如何在一个数据库 session 中执行我从测试用例中执行的所有请求,以便我可以删除所有更改数据库。还是有其他更清洁或正确的方法来做到这一点?
我发现也许我需要的只是 SqlAlchemy 中的“scoped_session”,但我实现它的所有尝试都失败了。如果这是正确的方法,请告诉我在哪里使用这行代码(在设置中,或在测试用例 set_up 方法中)。
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker
session_factory = sessionmaker()
Session = scoped_session(session_factory)
最佳答案
我建议您使用 Flask-Testing扩大。这是一个经过批准的扩展,可让您根据需要进行单元测试。它也有专门针对 SQLAlchemy 的部分。
使用 SQLAlchemy 进行测试
如果您将 Flask-Testing 与 SQLAlchemy 一起使用,这将涵盖几个要点。假设您使用的是 Flask-SQLAlchemy 扩展,但如果不是这样,示例应该不会太难适应您自己的特定设置。
首先,确保将数据库 URI 设置为生产数据库以外的其他内容!其次,在每次测试运行时创建和删除表通常是个好主意,以确保干净的测试:"
from flask.ext.testing import TestCase
from myapp import create_app, db
class MyTest(TestCase):
SQLALCHEMY_DATABASE_URI = "sqlite://"
TESTING = True
def create_app(self):
# pass in test configuration
return create_app(self)
def setUp(self):
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
关于python - 如何测试使用 SQLAlchemy 的 Flask 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17791571/