Skip to content

Testing

Django Ninja is fully compatible with standard django test client , but also provides a test client to make it easy to test just APIs without middleware/url-resolver layer making tests run faster.

To test the following API:

from ninja import NinjaAPI, Schema

api = NinjaAPI()
router = Router()

class HelloResponse(Schema):
    msg: str

@router.get("/hello", response=HelloResponse)
def hello(request):
    return {"msg": "Hello World"}

api.add_router("", router)

You can use the Django test class:

from django.test import TestCase
from ninja.testing import TestClient

class HelloTest(TestCase):
    def test_hello(self):
        client = NinjaTestClient(router)
        response = client.get("/hello")

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.json(), {"msg": "Hello World"})

Arbitrary attributes can be added to the request object by passing keyword arguments to the client request methods:

class HelloTest(TestCase):
    def test_hello(self):
        client = NinjaTestClient(router)
        # request.company_id will now be set within the view
        response = client.get("/hello", company_id=1)