Question Comment tester la session dans la ressource flask


Je voudrais tester une ressource. La réponse de cela dépend d'un paramètre dans la session (journalisé) Pour tester cette ressource, j'ai écrit ces tests:

import app
import unittest

class Test(unittest.TestCase):
    def setUp(self):
        self.app = app.app.test_client()

    def test_without_session(self):
        resp = self.app.get('/')
        self.assertEqual('without session', resp.data)

    def test_with_session(self):
        with self.app as c:
            with c.session_transaction() as sess:
                sess['logged'] = True
            resp = c.get('/')
        self.assertEqual('with session', resp.data)


if __name__ == '__main__':
    unittest.main()

Mon app.py est le suivant:

from flask import Flask, session


app = Flask(__name__)


@app.route('/')
def home():
    if 'logged' in session:
        return 'with session'
    return 'without session'


if __name__ == '__main__':
    app.run(debug=True)

Lorsque je lance les tests, j'ai cette erreur:

ERROR: test_pippo_with_session (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_pippo.py", line 17, in test_pippo_with_session
    with c.session_transaction() as sess:
  File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/home/tommaso/repos/prova-flask/local/lib/python2.7/site-packages/flask/testing.py", line 74, in session_transaction
    raise RuntimeError('Session backend did not open a session. '
RuntimeError: Session backend did not open a session. Check the configuration

Je n'ai trouvé aucune solution sur Google.


11
2018-01-31 17:32


origine


Réponses:


Si vous n'avez pas défini de coutume app.session_interface, alors vous avez oublié de définir un clef secrète:

def setUp(self):
    app.config['SECRET_KEY'] = 'sekrit!'
    self.app = app.app.test_client()

Cela définit simplement une clé secrète simulée pour les tests, mais pour que votre application fonctionne, vous devez générer une clé secrète de production, voir le section sessions dans la documentation de démarrage rapide pour des conseils sur la façon de produire une bonne clé secrète.

Sans clé secrète, la valeur par défaut implémentation de session ne parvient pas à créer une session.


14
2018-01-31 17:41