In order to test routes of FastAPI app, you can use TestClient.

1
2
3
4
5
def test_root():
    client = TestClient(app)
    response = client.get('/')
    assert response.status_code == 200
    assert response.json() == {'msg': 'Hello, FastAPI!'}

WebSocket

1
2
3
4
5
def test_socket():
    client = TestClient(app)
    with client.websocket_connect('/ws') as socket:
        data = socket.receive_json()
        assert data['msg'] == 'Hello, FastAPI!'

Lifespan

TestClient is also a context manager: it will run its lifespan events.

1
2
3
4
5
6
7
8
9
10
11
lifespan = False

@asynccontextmanager
async def lifespan(app: FastAPI):
    lifespan = True

app = FastAPI(lifespan=lifespan)

def test_lifespan():
    with TestClient(app) as client:
        assert lifespan

Mock Dependencies

You can add mock dependency function to app.dependency_overrides, which is a key-value store of <original>:<mock>. It will override your original dependency function, but don’t forget to reset after use.

1
app.dependency_overrides['original_dependency'] = mock_dependency


Back