89 votes

Test du code qui nécessite une application Flask ou un contexte de requête

Je reçois working outside of request context en essayant d'accéder à session dans un test. Comment puis-je configurer un contexte lorsque je teste quelque chose qui en nécessite un ?

import unittest
from flask import Flask, session

app = Flask(__name__)

@app.route('/')
def hello_world():
    t = Test()
    hello = t.hello()
    return hello

class Test:
    def hello(self):
        session['h'] = 'hello'
        return session['h']

class MyUnitTest(unittest.TestCase):
    def test_unit(self):
        t = tests.Test()
        t.hello()

168voto

tbicr Points 4969

Si vous voulez faire une demande à votre application, utilisez la fonction test_client .

c = app.test_client()
response = c.get('/test/url')
# test response

Si vous voulez tester un code qui utilise un contexte d'application ( current_app , g , url_for ), pousser un app_context .

with app.app_context():
    # test your app context code

Si vous voulez un code de test qui utilise un contexte de demande ( request , session ), pousser un test_request_context .

with current_app.test_request_context():
    # test your request context code

Les contextes d'application et de demande peuvent également être poussés manuellement, ce qui est utile lorsque l'on utilise l'interpréteur.

>>> ctx = app.app_context()
>>> ctx.push()

Flask-script ou le nouveau cli Flask poussera automatiquement un contexte d'application lors de l'exécution de la commande shell commandement.


Flask-Testing est une bibliothèque utile qui contient des aides pour tester les applications Flask.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X