2014-10-30 22 views
12

Używam kolbę należy zarejestrować i logowanie:py.test przetestować rejestr kolby, AssertionError: pojawiło kontekst źle żądania

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') 

następnie używam py.test przetestować klasę:

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)) 
     ... 

kiedy prowadził badania, błąd wystąpił następująco:

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>) 

wiesz dlaczego? I podczas testowania logowanie, nie było takich błędów

Odpowiedz

4

Wydaje się, że trzeba owinąć ty testowania połączenia z czymś takim:

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

Jest to znany kolba problem. Zamiast tego otrzymujesz dwa wyjątki. Po prostu dodaj PRESERVE_CONTEXT_ON_EXCEPTION = False do konfiguracji testowej.

0

Gdy twój testA ma błąd składniowy lub inne wyjątki, metoda tearDown(), która wykonuje zadanie kontekstowego pop, nie zostanie osiągnięta, więc kontekst testA nie został poprawnie wyświetlony. Następnie twój kolejny test, który nazywamy testB, pokaże kontekst testA. Dlatego właśnie wystąpił błąd AssertionError: Popped wrong request context..

Sprawdź błąd w kodzie testowym, napraw go. Wtedy AssertionError zniknie automatycznie.

Powiązane problemy