2014-10-30 15 views
12

Tôi đang sử dụng bình để làm đăng ký và đăng nhập:py.test để kiểm tra đăng ký bình, AssertionError: popped sai yêu cầu bối cảnh

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

sau đó tôi sử dụng py.test để kiểm tra các lớp:

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

khi tôi chạy thử nghiệm, các lỗi xảy ra như sau:

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

bạn có biết tại sao? Và khi kiểm tra đăng nhập, không có lỗi như vậy

Trả lời

4

Có vẻ như bạn phải quấn bạn kiểm tra các cuộc gọi với một cái gì đó như thế này:

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

Đó là một bình nổi tiếng problem. Bạn nhận được hai ngoại lệ thay vì một. Chỉ cần thêm PRESERVE_CONTEXT_ON_EXCEPTION = False vào cấu hình thử nghiệm của bạn.

0

Khi thử nghiệm của bạn có lỗi cú pháp hoặc các ngoại lệ khác, phương pháp tearDown() thực hiện công việc bật ngữ cảnh sẽ không đạt được, vì vậy ngữ cảnh của testA không xuất hiện chính xác. Sau đó thử nghiệm tiếp theo của bạn, chúng tôi gọi nó là testB sẽ bật bối cảnh của testA. Vì vậy, đó là lý do bạn gặp lỗi AssertionError: Popped wrong request context..

Kiểm tra lỗi trong mã thử nghiệm của bạn, khắc phục sự cố. Sau đó, AssertionError sẽ biến mất tự động.

Các vấn đề liên quan