diff --git a/src/reactpy/testing/backend.py b/src/reactpy/testing/backend.py index 439513755..94f85687c 100644 --- a/src/reactpy/testing/backend.py +++ b/src/reactpy/testing/backend.py @@ -3,7 +3,6 @@ import asyncio import logging from contextlib import AsyncExitStack -from threading import Thread from types import TracebackType from typing import Any, Callable from urllib.parse import urlencode, urlunparse @@ -16,7 +15,6 @@ from reactpy.config import REACTPY_TESTS_DEFAULT_TIMEOUT from reactpy.core.component import component from reactpy.core.hooks import use_callback, use_effect, use_state -from reactpy.testing.common import GITHUB_ACTIONS from reactpy.testing.logs import ( LogAssertionError, capture_reactpy_logs, @@ -121,7 +119,8 @@ async def __aenter__(self) -> BackendFixture: self.log_records = self._exit_stack.enter_context(capture_reactpy_logs()) # Wait for the server to start - Thread(target=self.webserver.run, daemon=True).start() + self.webserver.config.setup_event_loop() + self.webserver_task = asyncio.create_task(self.webserver.serve()) await asyncio.sleep(1) return self @@ -139,9 +138,8 @@ async def __aexit__( msg = "Unexpected logged exception" raise LogAssertionError(msg) from logged_errors[0] - await asyncio.wait_for( - self.webserver.shutdown(), timeout=90 if GITHUB_ACTIONS else 5 - ) + await self.webserver.shutdown() + self.webserver_task.cancel() async def restart(self) -> None: """Restart the server""" diff --git a/tests/test_asgi/test_standalone.py b/tests/test_asgi/test_standalone.py index 47b0ae492..954a33470 100644 --- a/tests/test_asgi/test_standalone.py +++ b/tests/test_asgi/test_standalone.py @@ -1,3 +1,4 @@ +import asyncio from collections.abc import MutableMapping import pytest @@ -155,8 +156,8 @@ def sample(): async with DisplayFixture(backend=server, driver=page) as new_display: await new_display.show(sample) url = f"http://{server.host}:{server.port}" - response = request( - "HEAD", url, timeout=REACTPY_TESTS_DEFAULT_TIMEOUT.current + response = await asyncio.to_thread( + request, "HEAD", url, timeout=REACTPY_TESTS_DEFAULT_TIMEOUT.current ) assert response.status_code == 200 assert response.headers["content-type"] == "text/html; charset=utf-8"