Testing code that requires a Flask app or request context
Solution 1:
If you want to make a request to your application, use the test_client
.
c = app.test_client()
response = c.get('/test/url')
# test response
If you want to test code which uses an application context (current_app
, g
, url_for
), push an app_context
.
with app.app_context():
# test your app context code
If you want test code which uses a request context (request
, session
), push a test_request_context
.
with current_app.test_request_context():
# test your request context code
Both app and request contexts can also be pushed manually, which is useful when using the interpreter.
>>> ctx = app.app_context()
>>> ctx.push()
Flask-Script or the new Flask cli will automatically push an app context when running the shell
command.
Flask-Testing
is a useful library that contains helpers for testing Flask apps.