在事务中运行flask测试

时间:2017-09-15 13:14:07

标签: python flask flask-sqlalchemy factory-boy

我使用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,以便在必要时显示更完整的示例。知道我在这里失踪的是什么吗?谢谢!

0 个答案:

没有答案