Skip to content

Commit feacabc

Browse files
authored
Rewrite tests without using sleep (#290)
1 parent a64456f commit feacabc

File tree

9 files changed

+20
-33
lines changed

9 files changed

+20
-33
lines changed

docs/src/reference/template-tag.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ This template tag can be used to insert any number of **client-side** ReactPy co
159159

160160
By default, the only [available dependencies](./template-tag.md#pyscript-setup) are the Python standard library, `pyscript`, `pyodide`, `reactpy` core.
161161

162-
The entire file path provided is loaded directly into the browser, and must have a `#!python def root()` component to act as the entry point.
162+
Your Python component file will be directly loaded into the browser. It must have a `#!python def root()` component to act as the entry point.
163163

164164
<!--pyscript-def-end-->
165165
<!--pyscript-raw-text-start-->

tests/test_app/components.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,7 @@ async def async_get_or_create_relational_parent():
222222

223223

224224
async def async_get_relational_parent_query():
225-
# Sleep to avoid race conditions in the test
226-
# Also serves as a good way of testing whether things are truly async
225+
# This sleep helps test whether queries are run asynchronously.
227226
await asyncio.sleep(3)
228227
return await async_get_or_create_relational_parent()
229228

tests/test_app/prerender/components.py

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def prerender_string():
1616
if scope.get("type") == "http":
1717
return "prerender_string: Prerendered"
1818

19+
# Simulate a processing delay to mimic the behavior of a slow application
1920
sleep(SLEEP_TIME)
2021
return "prerender_string: Fully Rendered"
2122

tests/test_app/templates/async_event_form.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<body>
2020
<h1>ReactPy Async Event Form Test Page</h1>
2121
<hr>
22-
{% component "test_app.forms.components.async_event_form" %}
22+
{% component "test_app.forms.components.async_event_form" prerender="false" %}
2323
<hr>
2424
</body>
2525

tests/test_app/templates/bootstrap_form.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<body>
2222
<h1>ReactPy Bootstrap Form Test Page</h1>
2323
<hr>
24-
{% component "test_app.forms.components.bootstrap_form" %}
24+
{% component "test_app.forms.components.bootstrap_form" prerender="false" %}
2525
<hr>
2626
</body>
2727

tests/test_app/templates/form.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<body>
2020
<h1>ReactPy Form Test Page</h1>
2121
<hr>
22-
{% component "test_app.forms.components.basic_form" %}
22+
{% component "test_app.forms.components.basic_form" prerender="false" %}
2323
<hr>
2424
</body>
2525

tests/test_app/templates/model_form.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<body>
2020
<h1>ReactPy Model Form Test Page</h1>
2121
<hr>
22-
{% component "test_app.forms.components.database_backed_form" %}
22+
{% component "test_app.forms.components.database_backed_form" prerender="false" %}
2323
<hr>
2424
</body>
2525

tests/test_app/templates/sync_event_form.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<body>
2020
<h1>ReactPy Sync Event Form Test Page</h1>
2121
<hr>
22-
{% component "test_app.forms.components.sync_event_form" %}
22+
{% component "test_app.forms.components.sync_event_form" prerender="false" %}
2323
<hr>
2424
</body>
2525

tests/test_app/tests/test_components.py

+12-25
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# ruff: noqa: RUF012, N802
33
import os
44
import socket
5-
from time import sleep
65
from uuid import uuid4
76

87
import pytest
@@ -314,11 +313,12 @@ def test_component_use_user_data_with_default(self):
314313

315314
# Attempt to clear data
316315
clear.click(delay=CLICK_DELAY)
317-
sleep(0.25)
318316
user_data_div = self.page.wait_for_selector(
319317
"#use-user-data-with-default[data-fetch-error=false][data-mutation-error=false][data-loading=false][data-username=user_3]"
320318
)
321-
assert "Data: {'default1': 'value', 'default2': 'value2', 'default3': 'value3'}" in user_data_div.text_content()
319+
expect(self.page.locator("#use-user-data-with-default")).to_contain_text(
320+
"Data: {'default1': 'value', 'default2': 'value2', 'default3': 'value3'}"
321+
)
322322

323323
@navigate_to_page("/")
324324
def test_component_use_auth(self):
@@ -407,25 +407,20 @@ def test_prerender(self):
407407
use_user_ws = self.page.locator("#use-user-ws[data-success=true]")
408408

409409
# Check if the prerender occurred properly
410-
string.wait_for()
411-
vdom.wait_for()
412-
component.wait_for()
413-
use_root_id_http.wait_for()
410+
expect(string).to_have_text("prerender_string: Prerendered")
411+
expect(vdom).to_have_text("prerender_vdom: Prerendered")
412+
expect(component).to_have_text("prerender_component: Prerendered")
414413
use_user_http.wait_for()
415-
assert string.all_inner_texts() == ["prerender_string: Prerendered"]
416-
assert vdom.all_inner_texts() == ["prerender_vdom: Prerendered"]
417-
assert component.all_inner_texts() == ["prerender_component: Prerendered"]
418-
root_id_value = use_root_id_http.get_attribute("data-value")
419-
assert len(root_id_value) == 36
414+
root_id = use_root_id_http.get_attribute("data-value")
415+
assert len(use_root_id_http.get_attribute("data-value")) == 36
420416

421417
# Check if the full render occurred
422-
sleep(2)
423-
assert string.all_inner_texts() == ["prerender_string: Fully Rendered"]
424-
assert vdom.all_inner_texts() == ["prerender_vdom: Fully Rendered"]
425-
assert component.all_inner_texts() == ["prerender_component: Fully Rendered"]
418+
expect(string).to_have_text("prerender_string: Fully Rendered")
419+
expect(vdom).to_have_text("prerender_vdom: Fully Rendered")
420+
expect(component).to_have_text("prerender_component: Fully Rendered")
426421
use_root_id_ws.wait_for()
427422
use_user_ws.wait_for()
428-
assert use_root_id_ws.get_attribute("data-value") == root_id_value
423+
expect(use_root_id_ws).to_have_attribute("data-value", root_id)
429424

430425
###############
431426
# Error Tests #
@@ -729,8 +724,6 @@ def test_form_basic(self):
729724
self.page.wait_for_selector("#id_password_field")
730725
self.page.wait_for_selector("#id_model_choice_field")
731726
self.page.wait_for_selector("#id_model_multiple_choice_field")
732-
733-
sleep(1)
734727
self.page.wait_for_selector("input[type=submit]").click(delay=CLICK_DELAY)
735728
self.page.wait_for_selector(".errorlist")
736729

@@ -801,8 +794,6 @@ def test_form_bootstrap(self):
801794
self.page.wait_for_selector("#id_boolean_field")
802795
self.page.wait_for_selector("#id_char_field")
803796
self.page.wait_for_selector("#id_choice_field")
804-
805-
sleep(1)
806797
self.page.wait_for_selector("button[type=submit]").click(delay=CLICK_DELAY)
807798
self.page.wait_for_selector(".invalid-feedback")
808799

@@ -827,8 +818,6 @@ def test_form_bootstrap(self):
827818
def test_form_orm_model(self):
828819
uuid = uuid4().hex
829820
self.page.wait_for_selector("form")
830-
831-
sleep(1)
832821
self.page.wait_for_selector("input[type=submit]").click(delay=CLICK_DELAY)
833822
self.page.wait_for_selector(".errorlist")
834823

@@ -872,7 +861,6 @@ def test_form_orm_model(self):
872861
# self.page.wait_for_selector("#change[data-value='false']")
873862

874863
# # Submit empty the form
875-
# sleep(1)
876864
# self.page.wait_for_selector("input[type=submit]").click(delay=CLICK_DELAY)
877865

878866
# # The empty form was submitted, should result in an error
@@ -902,7 +890,6 @@ def test_form_orm_model(self):
902890
# self.page.wait_for_selector("#change[data-value='false']")
903891

904892
# # Submit empty the form
905-
# sleep(1)
906893
# self.page.wait_for_selector("input[type=submit]").click(delay=CLICK_DELAY)
907894

908895
# # The empty form was submitted, should result in an error

0 commit comments

Comments
 (0)