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
|
SCREENSHOT_DIR: /tmp/screenshots
|
||||||
REDIS_URL: ${{ matrix.state_manager == 'redis' && 'redis://localhost:6379' || '' }}
|
REDIS_URL: ${{ matrix.state_manager == 'redis' && 'redis://localhost:6379' || '' }}
|
||||||
run: |
|
run: |
|
||||||
|
poetry run playwright install --with-deps
|
||||||
poetry run pytest tests/integration
|
poetry run pytest tests/integration
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
name: Upload failed test screenshots
|
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