Ich versuche gerade, einige Komponententests für meine Flask-Anwendung zu schreiben. In vielen meiner Ansichtsfunktionen (wie beispielsweise meinem Login) leite ich auf eine neue Seite um. So zum Beispiel:Testumleitung in Flask mit Python Unitest
@user.route('/login', methods=['GET', 'POST'])
def login():
....
return redirect(url_for('splash.dashboard'))
Ich versuche zu überprüfen, dass diese Umleitung in meinen Komponententests passiert. Gerade jetzt, ich habe:
def test_register(self):
rv = self.create_user('John','Smith','[email protected]', 'helloworld')
self.assertEquals(rv.status, "200 OK")
# self.assert_redirects(rv, url_for('splash.dashboard'))
Diese Funktion ist sicher, dass die zurückgegebene Antwort ist 200, aber die letzte Zeile ist offensichtlich nicht gültig Syntax. Wie kann ich das behaupten? Meine create_user
Funktion ist einfach:
def create_user(self, firstname, lastname, email, password):
return self.app.post('/user/register', data=dict(
firstname=firstname,
lastname=lastname,
email=email,
password=password
), follow_redirects=True)
Dank! Versuchen
Ich ermutige stark Leute, diese Lösung zu verwenden, die Flask-Testing-Abhängigkeit entfernt (im Allgemeinen denke ich, so wenig Erweiterungen zu verwenden ist eine gute Sache, oder nur die "stabilen" und "großen", wie Flask -Principal, Flask-Sicherheit, etc.). Diese Lösung löst jedoch einen RuntimeError aus: Es wurde versucht, eine URL zu generieren, ohne dass der Anwendungskontext übertragen wurde. Dies muss ausgeführt werden, wenn der Anwendungskontext verfügbar ist, da "url_for" einen Anwendungskontext benötigt. Alles, was Sie tun müssen, ist es in ein '' mit app.app_context(): ' – Edouardb