test for stateless apps (#3816)
* test for stateless apps * add playwright to dev dependencies * fix docstring * fix install of playwright in CI * fix install again * add allowed license * add retry on running integrations step * another attempt to fix licensing issue * update timeout duration for retry * fix timeout workflows * remove dep changes * remove outdated diff * fix scope in new test and workflow for appharness * run playwright tests last
This commit is contained in:
parent
c3848d0db4
commit
cba6993247
@ -51,6 +51,7 @@ jobs:
|
||||
SCREENSHOT_DIR: /tmp/screenshots
|
||||
REDIS_URL: ${{ matrix.state_manager == 'redis' && 'redis://localhost:6379' || '' }}
|
||||
run: |
|
||||
poetry run playwright install --with-deps
|
||||
poetry run pytest tests/integration
|
||||
- uses: actions/upload-artifact@v4
|
||||
name: Upload failed test screenshots
|
||||
|
59
tests/integration/tests_playwright/test_stateless_app.py
Normal file
59
tests/integration/tests_playwright/test_stateless_app.py
Normal file
@ -0,0 +1,59 @@
|
||||
"""Integration tests for a stateless app."""
|
||||
|
||||
from typing import Generator
|
||||
|
||||
import httpx
|
||||
import pytest
|
||||
from playwright.sync_api import Page, expect
|
||||
|
||||
import reflex as rx
|
||||
from reflex.testing import AppHarness
|
||||
|
||||
|
||||
def StatelessApp():
|
||||
"""A stateless app that renders a heading."""
|
||||
import reflex as rx
|
||||
|
||||
def index():
|
||||
return rx.heading("This is a stateless app")
|
||||
|
||||
app = rx.App()
|
||||
app.add_page(index)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def stateless_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
|
||||
"""Create a stateless app AppHarness.
|
||||
|
||||
Args:
|
||||
tmp_path_factory: pytest fixture for creating temporary directories.
|
||||
|
||||
Yields:
|
||||
AppHarness: A harness for testing the stateless app.
|
||||
"""
|
||||
with AppHarness.create(
|
||||
root=tmp_path_factory.mktemp("stateless_app"),
|
||||
app_source=StatelessApp, # type: ignore
|
||||
) as harness:
|
||||
yield harness
|
||||
|
||||
|
||||
def test_statelessness(stateless_app: AppHarness, page: Page):
|
||||
"""Test that the stateless app renders a heading but backend/_event is not mounted.
|
||||
|
||||
Args:
|
||||
stateless_app: A harness for testing the stateless app.
|
||||
page: A Playwright page.
|
||||
"""
|
||||
assert stateless_app.frontend_url is not None
|
||||
assert stateless_app.backend is not None
|
||||
assert stateless_app.backend.started
|
||||
|
||||
res = httpx.get(rx.config.get_config().api_url + "/_event")
|
||||
assert res.status_code == 404
|
||||
|
||||
res2 = httpx.get(rx.config.get_config().api_url + "/ping")
|
||||
assert res2.status_code == 200
|
||||
|
||||
page.goto(stateless_app.frontend_url)
|
||||
expect(page.get_by_role("heading")).to_have_text("This is a stateless app")
|
Loading…
Reference in New Issue
Block a user