in einem Kolben unit-test, wie kann ich die mock-Objekte auf Anfrage-global `g` - Objekt?
Ich habe eine flask Anwendung, die den Aufbau einer Datenbank-Verbindung in einem before_filter
sehr ähnlich diese:
@app.before_request
def before_request():
g.db = connect_db()
Nun: Schreibe ich einige unit-tests und ich nicht wollen, dass Sie für die hit-Datenbank. Ich will zu ersetzen g.db
mit einem mock-Objekt, dass ich einstellen kann, Erwartungen auf.
Meine tests sind mit app.test_client()
, wie gezeigt, in der flask Dokumentation hier. Ein Beispiel test sieht so etwas wie
def test(self):
response = app.test_client().post('/endpoint', data={..})
self.assertEqual(response.status_code, 200)
...
Den tests arbeiten und zu passieren, aber Sie sind zu schlagen, der Datenbank und als ich sagte ich will zu ersetzen, die den Zugriff auf die db mit mock-Objekten. Ich sehe keinen Weg in test_client
Zugriff auf die g
Objekt oder ändern Sie die before_filters.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktioniert
test_app.py
test.py
Also print out "habe ich nicht getroffen den db' statt 'landete ich im eigentlichen Funktion'. Natürlich werden Sie brauchen, um anzupassen, die verhöhnt, die Ihrem tatsächlichen Anwendungsfall.
RuntimeError: working outside of request context
g = G()
, warum ist das notwendig?db
um die tests arbeiten. Vermutlich haben Sie schon-einer von denen 🙂g
Objekt speziell für Fläschchen und setzt seine Attribute nach jeder Anfrage. Ich glaube nicht, es wäre eine gute Idee, benutzen Sie einfach ein beliebiges Objekt, die benimmt sich nicht so.connect_db
. Möglicherweise möchten Sie zu einem Spiel mit den mock-und patch-libraries, bevor zufällig downvoting akzeptierte Antworten.G
Objekt, und fügen Sieg
zu deiner Flasche importiert. So sollten Siefrom flask import Flask, g
. Es wird die Antwort viel klarer!