Reputation: 5173
I have delete endpoint, returning HTTP 204
@blueprint.route('/foo', methods=['DELETE'])
def delete_tag(id):
# ....
return '', 204
and I want to test it
def test_delete_tag(self):
resp = self.client.delete(url_for('tags.delete_tag', id=1))
self.assertEqual(resp.status_code, 204)
but I got exception
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
with response status 200 it works all fine. Is there way how to fix the test?
Upvotes: 5
Views: 3547
Reputation: 6957
small flask app:
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)
and in ipython qtconsole; i did this:
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
Upvotes: 1
Reputation: 1454
The mining of 204 is "no content" at all, it's assume that you're not going to add any body in that response.
Upvotes: 2