Skip to content

Commit 268d301

Browse files
committed
finish up use_effect tests
1 parent 323f9b5 commit 268d301

File tree

1 file changed

+67
-4
lines changed

1 file changed

+67
-4
lines changed

tests/test_core/test_hooks.py

Lines changed: 67 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from idom.core.element import element
2+
import re
3+
14
import pytest
25

36
import idom
@@ -389,12 +392,72 @@ def effect():
389392
assert effect_run_count.current == 2
390393

391394

392-
def test_error_in_effect_is_gracefully_handled():
393-
assert False
395+
async def test_error_in_effect_is_gracefully_handled(caplog):
396+
@idom.element
397+
async def ElementWithEffect():
398+
@idom.hooks.use_effect
399+
def bad_effect():
400+
raise ValueError("Something went wong :(")
401+
402+
return idom.html.div()
394403

404+
async with idom.Layout(ElementWithEffect()) as layout:
405+
await layout.render() # no error
395406

396-
def test_error_in_effect_cleanup_is_gracefully_handled():
397-
assert False
407+
first_log_line = next(iter(caplog.records)).msg.split("\n", 1)[0]
408+
assert re.match("Post-render effect .*? failed for .*?", first_log_line)
409+
410+
411+
async def test_error_in_effect_pre_render_cleanup_is_gracefully_handled(caplog):
412+
element_hook = HookCatcher()
413+
414+
@idom.element
415+
@element_hook.capture
416+
async def ElementWithEffect():
417+
@idom.hooks.use_effect
418+
def ok_effect():
419+
def bad_cleanup():
420+
raise ValueError("Something went wong :(")
421+
422+
return bad_cleanup
423+
424+
return idom.html.div()
425+
426+
async with idom.Layout(ElementWithEffect()) as layout:
427+
await layout.render()
428+
element_hook.schedule_render()
429+
await layout.render() # no error
430+
431+
first_log_line = next(iter(caplog.records)).msg.split("\n", 1)[0]
432+
assert re.match("Pre-render effect .*? failed for .*?", first_log_line)
433+
434+
435+
async def test_error_in_effect_pre_unmount_cleanup_is_gracefully_handled(caplog):
436+
outer_element_hook = HookCatcher()
437+
438+
@idom.element
439+
@outer_element_hook.capture
440+
async def OuterElement():
441+
return ElementWithEffect()
442+
443+
@idom.element
444+
async def ElementWithEffect():
445+
@idom.hooks.use_effect
446+
def ok_effect():
447+
def bad_cleanup():
448+
raise ValueError("Something went wong :(")
449+
450+
return bad_cleanup
451+
452+
return idom.html.div()
453+
454+
async with idom.Layout(OuterElement()) as layout:
455+
await layout.render()
456+
outer_element_hook.schedule_render()
457+
await layout.render() # no error
458+
459+
first_log_line = next(iter(caplog.records)).msg.split("\n", 1)[0]
460+
assert re.match("Pre-unmount effect .*? failed for .*?", first_log_line)
398461

399462

400463
async def test_use_reducer():

0 commit comments

Comments
 (0)