如何用flask-sqlalchemy编写doctests?

时间:2017-08-24 15:16:57

标签: python flask-sqlalchemy doctest

我的申请有效。只有doctests不起作用。

在应用程序中,我使用模式

from models import db

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://..."

db.init_app(app)

...

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', threaded=True)

我有几个非常简单的doctests。在从Flask + Sqlalchemy切换到flask-sqlalchemy之前,它有效:

>>> import database
>>> files_insert(..., no_commit=True)  # database stuff happens here
>>> database.session.rollback()

可以删除插入测试(它们可能没有太多意义),但我有几个函数只需要从数据库中选择元素。这应该仍然有效。但我明白了:

RuntimeError: application not registered on db instance and no applicationbound to current context

有没有办法配置我的应用程序,以便文档字符串始终获取应用程序上下文?

1 个答案:

答案 0 :(得分:0)

您的doctest缺少应用程序上下文,因为您使用flask-sqlalchemy,您已绑定了应用程序实例和数据库实例。检查this issue

解决方法(实际上是一个黑客攻击方法)是修补flask会话,请求和current_app对象,查看this comment on the same issuepytest修补它。

但恕我直言,当你开始以这种方式进行黑客攻击时,是时候切换到常规测试方法,单元测试或pytest。

虽然doctest对于简单的代码很有用,但是当你必须破解和/或设置一个完整的上下文来运行doctest时,你仍然会失去它的简单性......