我使用Flask-SQLAlchemy进行Flask应用程序设置,并且我正在使用factory-boy运行测试。我试图将测试包装在事务中,以免用测试数据填充数据库(并避免在测试之间删除/重新创建数据库,因为它非常昂贵)。
但是,由于在每次请求后删除了db会话,因此除非我在发出请求之前提交会话,否则为测试创建的对象将丢失。
有没有办法在测试上下文和请求上下文之间共享会话?
这是一个测试示例:
class TestUserViews(unittest.TestCase):
def setUp(self):
self.client = app.test_client()
def test_user_detail(self):
with app.test_request_context():
# Make sure requesting an unknown user returns a 404
response = self.client.get('/users/123/')
assert response.status_code == 404
# Create a user
user = UserFactory()
db.session.commit()
response = self.client.get('/users/{}/'.format(user.id))
assert response.status_code == 200 # This works since the write was committed
def test_user_uncommitted(self):
with app.test_request_context():
# Create a user
uncommitted_user = UserFactory()
assert uncommitted_user in db.session
response = self.client.get('/users/{}/'.format(uncommitted_user.id))
assert response.status_code == 200 # This doesn't work, the session wasn't reused
我构建了一个虚拟项目on github,以便在必要时显示更完整的示例。知道我在这里失踪的是什么吗?谢谢!