import asyncio from datetime import datetime import pytest from fastapi import FastAPI from starlette.testclient import TestClient from pydantic import BaseModel class CustomDatetime(BaseModel): dt_field: datetime class Config: json_encoders = { datetime: lambda dt: dt.strftime('%Y-%m-%dT%H:%M:%SZ'), } app = FastAPI() @pytest.fixture(autouse=True) def get_event_loop() -> None: asyncio.set_event_loop(asyncio.new_event_loop()) @app.get('/model', response_model=CustomDatetime) def get_model(): return CustomDatetime(dt_field=datetime(2019, 1, 1, 8)) def test_datetime_custom_format(): with TestClient(app) as client: response = client.get('/model') assert response.json() == {'dt_field': '2019-01-01T08:00:00Z'}