dans un Flacon de test unitaire, comment les objets fantaisie sur la demande globale de l' `g` objet?
J'ai un flacon d'application qui est la configuration d'une connexion de base de données dans un before_filter
, très semblable à cette:
@app.before_request
def before_request():
g.db = connect_db()
Maintenant: je suis en train d'écrire unitaires-tests et je ne pas voulez frapper la base de données. Je veux remplacer g.db
avec un simulacre de l'objet que je peux définir les attentes.
Mes tests, sont à l'aide de app.test_client()
, comme il est démontré dans le flacon de la documentation ici. Un exemple de test ressemble à quelque chose comme
def test(self):
response = app.test_client().post('/endpoint', data={..})
self.assertEqual(response.status_code, 200)
...
Les tests de travail et de passage, mais ils sont frapper la base de données et comme je l'ai dit je veux remplacer db accès avec des objets fantaisie. Je ne vois pas de toute façon test_client
pour accéder à la g
objet ou de modifier le before_filters.
OriginalL'auteur Gabe Moothart | 2013-01-03
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne
test_app.py
test.py
Donc ce sera imprimée "je n'ai pas de frapper la db", plutôt que "je me suis retrouvé à l'intérieur de la fonction réelle'. Évidemment, vous aurez besoin d'adapter les objets fantaisie à votre cas d'utilisation.
RuntimeError: working outside of request context
Je viens d'écrire un article plus complet qui, en fait, j'ai testé et de travail.
J'aime l'idée! La seule partie que je ne comprends pas, c'est
g = G()
, pourquoi est-ce nécessaire?Je pense que vous êtes tout simplement de l'incompréhension de l'exemple. Quand je poste des réponses, je tiens à avoir fait exécuter. Le global 'g' objet est inutile parce qu'il n'est pas patché. Au lieu de cela, la fonction d'être patché est
connect_db
. Vous pourriez avoir un jeu avec la fantaisie et le patch bibliothèques avant au hasard downvoting réponses acceptées.En regardant en arrière sur ce que je ne peux pas voir comment j'ai réussi à ne comprennent pas cela. Malheureusement, mon vote est verrouillé par maintenant. Désolé.
OriginalL'auteur aychedee