123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- """Test that Script from next/script renders correctly."""
- import pytest
- import reflex as rx
- from reflex.components.base.script import Script
- from reflex.state import BaseState
- def test_script_inline():
- """Test inline scripts are rendered as children."""
- component = Script.create("let x = 42")
- render_dict = component.render()
- assert render_dict["name"] == "Script"
- assert not render_dict["contents"]
- assert len(render_dict["children"]) == 1
- assert render_dict["children"][0]["contents"] == '"let x = 42"'
- def test_script_src():
- """Test src prop is rendered without children."""
- component = Script.create(src="foo.js")
- render_dict = component.render()
- assert render_dict["name"] == "Script"
- assert not render_dict["contents"]
- assert not render_dict["children"]
- assert 'src:"foo.js"' in render_dict["props"]
- def test_script_neither():
- """Specifying neither children nor src is a ValueError."""
- with pytest.raises(ValueError):
- Script.create()
- class EvState(BaseState):
- """State for testing event handlers."""
- @rx.event
- def on_ready(self):
- """Empty event handler."""
- pass
- @rx.event
- def on_load(self):
- """Empty event handler."""
- pass
- @rx.event
- def on_error(self):
- """Empty event handler."""
- pass
- def test_script_event_handler():
- """Test event handlers are rendered as expected."""
- component = Script.create(
- src="foo.js",
- on_ready=EvState.on_ready,
- on_load=EvState.on_load,
- on_error=EvState.on_error,
- )
- render_dict = component.render()
- assert (
- f'onReady:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_ready", ({{ }}), ({{ }})))], args, ({{ }}))))'
- in render_dict["props"]
- )
- assert (
- f'onLoad:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_load", ({{ }}), ({{ }})))], args, ({{ }}))))'
- in render_dict["props"]
- )
- assert (
- f'onError:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_error", ({{ }}), ({{ }})))], args, ({{ }}))))'
- in render_dict["props"]
- )
|