def add_api_websocket_route(
self, path: str, endpoint: Callable, name: str = None
) -> None:
- route = APIWebSocketRoute(path, endpoint=endpoint, name=name)
+ route = APIWebSocketRoute(
+ path,
+ endpoint=endpoint,
+ name=name,
+ dependency_overrides_provider=self.dependency_overrides_provider,
+ )
self.routes.append(route)
def websocket(self, path: str, name: str = None) -> Callable:
-from fastapi import APIRouter, FastAPI, WebSocket
+from fastapi import APIRouter, Depends, FastAPI, WebSocket
from fastapi.testclient import TestClient
router = APIRouter()
await websocket.close()
+async def ws_dependency():
+ return "Socket Dependency"
+
+
+@router.websocket("/router-ws-depends/")
+async def router_ws_decorator_depends(
+ websocket: WebSocket, data=Depends(ws_dependency)
+):
+ await websocket.accept()
+ await websocket.send_text(data)
+ await websocket.close()
+
+
app.include_router(router)
app.include_router(prefix_router, prefix="/prefix")
with client.websocket_connect("/router2") as websocket:
data = websocket.receive_text()
assert data == "Hello, router!"
+
+
+def test_router_ws_depends():
+ client = TestClient(app)
+ with client.websocket_connect("/router-ws-depends/") as websocket:
+ assert websocket.receive_text() == "Socket Dependency"
+
+
+def test_router_ws_depends_with_override():
+ client = TestClient(app)
+ app.dependency_overrides[ws_dependency] = lambda: "Override"
+ with client.websocket_connect("/router-ws-depends/") as websocket:
+ assert websocket.receive_text() == "Override"