@ -317,3 +317,63 @@ def test_router_async_generator_lifespan(state: State) -> None:
assert response . json ( ) == { " message " : " Hello World " }
assert state . app_startup is True
assert state . app_shutdown is True
def test_startup_shutdown_handlers_as_parameters ( state : State ) - > None :
""" Test that startup/shutdown handlers passed as parameters to FastAPI are called correctly. """
def app_startup ( ) - > None :
state . app_startup = True
def app_shutdown ( ) - > None :
state . app_shutdown = True
app = FastAPI ( on_startup = [ app_startup ] , on_shutdown = [ app_shutdown ] )
@app . get ( " / " )
def main ( ) - > dict [ str , str ] :
return { " message " : " Hello World " }
def router_startup ( ) - > None :
state . router_startup = True
def router_shutdown ( ) - > None :
state . router_shutdown = True
router = APIRouter ( on_startup = [ router_startup ] , on_shutdown = [ router_shutdown ] )
def sub_router_startup ( ) - > None :
state . sub_router_startup = True
def sub_router_shutdown ( ) - > None :
state . sub_router_shutdown = True
sub_router = APIRouter (
on_startup = [ sub_router_startup ] , on_shutdown = [ sub_router_shutdown ]
)
router . include_router ( sub_router )
app . include_router ( router )
assert state . app_startup is False
assert state . router_startup is False
assert state . sub_router_startup is False
assert state . app_shutdown is False
assert state . router_shutdown is False
assert state . sub_router_shutdown is False
with TestClient ( app ) as client :
assert state . app_startup is True
assert state . router_startup is True
assert state . sub_router_startup is True
assert state . app_shutdown is False
assert state . router_shutdown is False
assert state . sub_router_shutdown is False
response = client . get ( " / " )
assert response . status_code == 200 , response . text
assert response . json ( ) == { " message " : " Hello World " }
assert state . app_startup is True
assert state . router_startup is True
assert state . sub_router_startup is True
assert state . app_shutdown is True
assert state . router_shutdown is True
assert state . sub_router_shutdown is True