2014-10-30 1 views
12

Я использую флягу, зарегистрируйте и Логин:py.test для проверки опоки регистра, AssertionError: Выскочил контекст неправильно запрос

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

то я использую py.test протестировать класс:

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

, когда я запускал тест, ошибка произошла следующим образом:

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

вы знаете, почему? И при тестировании входа, там не было такой ошибки

ответ

4

кажется, что вы должны обернуть Тестируете звонки с чем-то вроде этого:

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

Это известная колба problem. Вместо этого вы получаете два исключения. Просто добавьте PRESERVE_CONTEXT_ON_EXCEPTION = False в свой тестовый конфиг.

0

Когда ваш testA имеет синтаксическую ошибку или другие исключения, метод tearDown(), который выполняет задание по умолчанию, не будет достигнут, поэтому контекст testA не был правильно выбит. Тогда ваш следующий тест, который мы называем testB, выйдет в контекст testA. Итак, вот почему вы получили сообщение об ошибке AssertionError: Popped wrong request context..

Проверьте исправность в тестовом коде, исправьте ее. Затем AssertionError исчезнет автоматически.