diff --git a/httpx/_transports/mock.py b/httpx/_transports/mock.py index 8c418f59e0..dd382a9772 100644 --- a/httpx/_transports/mock.py +++ b/httpx/_transports/mock.py @@ -1,5 +1,6 @@ from __future__ import annotations +import datetime import typing from .._models import Request, Response @@ -24,6 +25,7 @@ def handle_request( response = self.handler(request) if not isinstance(response, Response): # pragma: no cover raise TypeError("Cannot use an async handler in a sync Client") + response.elapsed = datetime.timedelta(seconds=0) return response async def handle_async_request( @@ -40,4 +42,5 @@ async def handle_async_request( if not isinstance(response, Response): response = await response + response.elapsed = datetime.timedelta(seconds=0) return response diff --git a/tests/test_transports.py b/tests/test_transports.py new file mode 100644 index 0000000000..56a3c574ec --- /dev/null +++ b/tests/test_transports.py @@ -0,0 +1,24 @@ +import datetime +import pytest +import httpx + + +def test_mock_transport_sets_elapsed(): + """Test that MockTransport sets the elapsed property on responses.""" + + # 1. Create a simple handler that returns a response + def handler(request: httpx.Request) -> httpx.Response: + return httpx.Response(200, content=b"Hello") + + # 2. Create a MockTransport with that handler + transport = httpx.MockTransport(handler) + + # 3. Create a client with the transport + client = httpx.Client(transport=transport) + + # 4. Make a request + response = client.get("http://example.com/") + + # 5. Assert that elapsed is set and is a timedelta + assert hasattr(response, "_elapsed") + assert isinstance(response.elapsed, datetime.timedelta)