[As per https://stackoverflow.com/a/46369945/1021819, the title should refer to integration tests rather than unit tests]
Suppose I'd like to test the following Flask API (from here):
import flask import flask_restful app = flask.Flask(__name__) api = flask_restful.Api(app) class HelloWorld(flask_restful.Resource): def get(self): return {'hello': 'world'} api.add_resource(HelloWorld, '/') if __name__ == "__main__": app.run(debug=True)
Having saved this as flaskapi.py
and run it, in the same directory I run the script test_flaskapi.py
:
import unittest import flaskapi import requests class TestFlaskApiUsingRequests(unittest.TestCase): def test_hello_world(self): response = requests.get('http://localhost:5000') self.assertEqual(response.json(), {'hello': 'world'}) class TestFlaskApi(unittest.TestCase): def setUp(self): self.app = flaskapi.app.test_client() def test_hello_world(self): response = self.app.get('/') if __name__ == "__main__": unittest.main()
Both the tests pass, but for the second test (defined in the TestFlaskApi
) class I haven't yet figured out how to assert that the JSON response is as expected (namely, {'hello': 'world'}
). This is because it is an instance of flask.wrappers.Response
(which is probably essentially a Werkzeug Response object (cf. http://werkzeug.pocoo.org/docs/0.11/wrappers/)), and I haven't been able to find an equivalent of the json()
method for requests
Response object.
How can I make assertions on the JSON content of the second response
?
Tests are typically located in the tests folder. Tests are functions that start with test_ , in Python modules that start with test_ . Tests can also be further grouped in classes that start with Test .
Flask provides a test_client you can use in your tests:
from source.api import app from unittest import TestCase class TestIntegrations(TestCase): def setUp(self): self.app = app.test_client() def test_thing(self): response = self.app.get('/') assert <make your assertion here>
Flask Testing Docs
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With