2015-02-24 75 views
4

我删除终点,返回HTTP 204 瓶test_client无法处理HTTP 204个无数据

@blueprint.route('/foo', methods=['DELETE']) 
def delete_tag(id): 
    # .... 
    return '', 204 

,我想测试

def test_delete_tag(self): 
    resp = self.client.delete(url_for('tags.delete_tag', id=1)) 
    self.assertEqual(resp.status_code, 204) 

,但我得到异常

Traceback (most recent call last): 
    File "tests/tags_test.py", line 31, in test_delete_tag 
    resp = self.client.delete(url_for('tags.delete_tag', id=1)}) 
    File ".virtualenvs/...site-packages/werkzeug/test.py", line 799, in delete 
    return self.open(*args, **kw) 
    File ".virtualenvs/...site-packages/flask/testing.py", line 108, in open 
    follow_redirects=follow_redirects) 
    File ".virtualenvs/...site-packages/werkzeug/test.py", line 742, in open 
    response = self.run_wsgi_app(environ, buffered=buffered) 
    File ".virtualenvs/...site-packages/werkzeug/test.py", line 659, in run_wsgi_app 
    rv = run_wsgi_app(self.application, environ, buffered=buffered) 
    File ".virtualenvs/.../site-packages/werkzeug/test.py", line 885, in run_wsgi_app 
    buffer.append(next(app_iter)) 
StopIteration 

响应状态200它工作正常。有办法如何修复测试?

+0

我也确认了我的问题。添加'buffered = True'可以解决问题,但我不明白为什么。 – 2016-01-14 14:04:50

回答

1

小烧瓶应用程式:

from flask import Flask, request 
app = Flask(__name__) 

@app.route('/foo', methods=['DELETE']) 
def delete_tag(): 
    print "i got", request.form['id'] 
    return '', 204 

@app.route('/foo2/<id>', methods=['DELETE']) 
def delete_tag2(id): 
    print "i got.. .", id 
    return '', 204 

if __name__ == '__main__': 
    app.run(debug=True) 

和在IPython中qtconsole;我这样做:

In [3]: from app import app 

In [4]: from flask import url_for 

In [5]: c = app.test_client() 

In [6]: with app.test_request_context(): 
    ...:  rv = c.delete(url_for('delete_tag2', id=55)) 
    ...:  print rv.status_code 
    ...:  
i got.. . 55 
204 

In [7]: rv = c.delete("/foo", data={"id": 555}) 
i got 555 

In [8]: rv.status_code 
Out[8]: 204 
+0

嗯,对我来说行为一样。这至少会缩小可能出现问题的地方。 – farincz 2015-02-24 14:33:56