2017-08-24 13 views
0

私のアプリケーションが動作します。 doctestだけが動作しません。アプリケーションでフラスコ - sqlalchemyでdoctestを書くにはどうしたらいいですか?

、私は本当に簡単なのdoctestのカップルを持っているパターン

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) 

を使用しています。フラスコSQLAlchemyのフラスコ+ 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 

docstringが常にアプリケーションのコンテキストを取得するように私のアプリを設定する方法はありますか?

答えて

0

doctestにはアプリケーションコンテキストがありません.future-sqlalchemyを使用しているため、アプリケーションインスタンスとDBインスタンスがバインドされています。this issueを確認してください。

回避策(実際にハックする)フラスコセッション、リクエスト、およびcurrent_appオブジェクトにパッチを当てるのは、pytestにパッチを適用するthis comment on the same issueです。

しかし、この方法でハッキングを開始すると、通常のテスト方法、unittestまたはpytestに切り替えることになります。

doctestあなたはdoctestのを実行するための完全なコンテキストをハックおよび/またはセットアップする必要があるとき、あなたはとにかくそれのシンプルさを失う簡単なコードのための素晴らしいですが...

関連する問題