2014-10-30 5 views
12

Ich bin mit Kolben zu tun registrieren und einloggen:py.test zu testen Kolben Register, AssertionError: Popped falsch Anforderungskontext

from flask.ext.security.views import register, login 

class Register(Resource): 
    def post(self): 
     return register() 

class Login(Resource): 
    def post(self): 
     return login() 

api.add_resource(Login, '/login') 
api.add_resource(Register, '/register') 

dann verwende ich py.test die Klasse zu testen:

class TestAPI: 
    def test_survey(self, app): 
     client = app.test_client() 
     data = {'email': '[email protected]', 'password': 'password'} 
     rv = client.post('/2014-10-17/register', 
          data=json.dumps(data)) 
     ... 

wenn ich den Test lief, trat der Fehler wie folgt:

AssertionError: Popped wrong request context. (<RequestContext 'http://localhost/2014-10-17/register' [POST] of panel.app> instead of <RequestContext 'http://localhost/' [GET] of panel.app>) 

wissen Sie, warum? Und wenn Login testen, gab es keine solche Fehler

Antwort

4

Es scheint, dass Sie zu wickeln haben Sie Anrufe mit so etwas wie diese Prüfung:

with self.app.test_client() as client: 
    data = {'email': '[email protected]', 'password': 'password'} 
    rv = client.post('/2014-10-17/register', data=json.dumps(data)) 
    ... 
17

Es ist eine bekannte Kolben problem. Sie erhalten stattdessen zwei Ausnahmen. Fügen Sie einfach PRESERVE_CONTEXT_ON_EXCEPTION = False zu Ihrer Testkonfiguration hinzu.

0

Wenn Ihr TestA einen Syntaxfehler oder andere Ausnahmen aufweist, wird die tearDown()-Methode, die den Kontext-Popup-Job ausführt, nicht erreicht, so dass der Kontext von testA nicht korrekt abgerufen wurde. Dann wird der nächste Test, den wir TestB nennen, den Kontext von TestA anzeigen. Also, deshalb hast du den Fehler AssertionError: Popped wrong request context..

Überprüfen Sie den Fehler in Ihrem Testcode, beheben Sie es. Dann wird die AssertionError automatisch gelöscht.