5

我有删除端点,返回 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,一切正常。有没有办法修复测试?

4

2 回答 2

2

204 的挖掘根本是“无内容”,假设您不会在该响应中添加任何正文。

于 2019-07-22T09:15:15.813 回答
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
于 2015-02-24T12:56:28.657 回答