2016-01-13 64 views
0

我正在嘗試在我的Flask中設置測試,但是由於未知的原因,當我使用arobase添加參數時,Flask失敗。Flask測試客戶端拒絕arobase中的數據?

我這裏http://flask.pocoo.org/snippets/26/跟着片段,可以使一個成功的請求(它的工作原理),但是當我嘗試做一個帖子,它失敗(以下情況除外):

def test_auth_login_fail(self): 
    """ Login fail """ 
    result = self.client.post(self._make_url("/auth/login"), data=dict(
     email="[email protected]", 
     password='cxcxz' 
    )) 
    self.assertEqual(result.status_code, 404) 

和異常:

Traceback (most recent call last): 
    File "/var/www/html/api/apps/auth/tests/login.py", line 20, in test_auth_login_fail 
    password='cxcxz' 
    File "/usr/lib/python2.7/site-packages/werkzeug/test.py", line 772, in post 
    return self.open(*args, **kw) 
    File "/usr/lib/python2.7/site-packages/flask/testing.py", line 108, in open 
    follow_redirects=follow_redirects) 
    File "/usr/lib/python2.7/site-packages/werkzeug/test.py", line 736, in open 
    response = self.run_wsgi_app(environ, buffered=buffered) 
    File "/usr/lib/python2.7/site-packages/werkzeug/test.py", line 659, in run_wsgi_app 
    rv = run_wsgi_app(self.application, environ, buffered=buffered) 
    File "/usr/lib/python2.7/site-packages/werkzeug/test.py", line 855, in run_wsgi_app 
    app_iter = app(environ, start_response) 
    File "/usr/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/var/www/html/api/utils/middlewares.py", line 55, in __call__ 
    return self.app(environ, start_response) 
    File "/usr/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/lib/python2.7/site-packages/flask/app.py", line 1478, in full_dispatch_request 
    response = self.make_response(rv) 
    File "/usr/lib/python2.7/site-packages/flask/app.py", line 1577, in make_response 
    rv = self.response_class.force_type(rv, request.environ) 
    File "/usr/lib/python2.7/site-packages/werkzeug/wrappers.py", line 827, in force_type 
    response = BaseResponse(*_run_wsgi_app(response, environ)) 
    File "/usr/lib/python2.7/site-packages/werkzeug/wrappers.py", line 57, in _run_wsgi_app 
    return _run_wsgi_app(*args) 
    File "/usr/lib/python2.7/site-packages/werkzeug/test.py", line 855, in run_wsgi_app 
    app_iter = app(environ, start_response) 
TypeError: 'tuple' object is not callable 

有關信息,這不會產生異常:

def test_auth_login_fail(self): 
     """ Login fail """ 
     result = self.client.post(self._make_url("/auth/login"), data=dict(
      email="userwebsite.com", 
      password='cxcxz' 
     )) 
     self.assertEqual(result.status_code, 404) 

(注意「@」刪除)

我也刪除了中間件(在回溯中指出)沒有太多成功。

我錯過了什麼?

回答

1

看起來如果電子郵件是正確的,您從視圖函數返回錯誤(一個元組)。而當你傳遞格式不正確的電子郵件時,你返回的價值是可以的。

+0

好的,這正是原因,但是......我不明白爲什麼。我返回這個:'返回jsonify({...}),400'和元組添加狀態碼。我認爲這個響應是一個真正的http響應,所以狀態碼爲400,而不是元組。我該如何解決這個問題? –

+1

您不能使用元組來指定(body,status_code)對。改爲使用[make_response](http://flask.pocoo.org/docs/0.10/api/#flask.make_response)。 –

+0

奇怪的是,我不能,因爲它工作(但你是對的,它使用'make_response'更好,即使它返回一個元組的工作相同(從http的角度來看)) –

相關問題