test_script.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. """Test that Script from next/script renders correctly."""
  2. import pytest
  3. import reflex as rx
  4. from reflex.components.base.script import Script
  5. from reflex.state import BaseState
  6. def test_script_inline():
  7. """Test inline scripts are rendered as children."""
  8. component = Script.create("let x = 42")
  9. render_dict = component.render()
  10. assert render_dict["name"] == "Script"
  11. assert not render_dict["contents"]
  12. assert len(render_dict["children"]) == 1
  13. assert render_dict["children"][0]["contents"] == '"let x = 42"'
  14. def test_script_src():
  15. """Test src prop is rendered without children."""
  16. component = Script.create(src="foo.js")
  17. render_dict = component.render()
  18. assert render_dict["name"] == "Script"
  19. assert not render_dict["contents"]
  20. assert not render_dict["children"]
  21. assert 'src:"foo.js"' in render_dict["props"]
  22. def test_script_neither():
  23. """Specifying neither children nor src is a ValueError."""
  24. with pytest.raises(ValueError):
  25. Script.create()
  26. class EvState(BaseState):
  27. """State for testing event handlers."""
  28. @rx.event
  29. def on_ready(self):
  30. """Empty event handler."""
  31. pass
  32. @rx.event
  33. def on_load(self):
  34. """Empty event handler."""
  35. pass
  36. @rx.event
  37. def on_error(self):
  38. """Empty event handler."""
  39. pass
  40. def test_script_event_handler():
  41. """Test event handlers are rendered as expected."""
  42. component = Script.create(
  43. src="foo.js",
  44. on_ready=EvState.on_ready,
  45. on_load=EvState.on_load,
  46. on_error=EvState.on_error,
  47. )
  48. render_dict = component.render()
  49. assert (
  50. f'onReady:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_ready", ({{ }}), ({{ }})))], args, ({{ }}))))'
  51. in render_dict["props"]
  52. )
  53. assert (
  54. f'onLoad:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_load", ({{ }}), ({{ }})))], args, ({{ }}))))'
  55. in render_dict["props"]
  56. )
  57. assert (
  58. f'onError:((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_error", ({{ }}), ({{ }})))], args, ({{ }}))))'
  59. in render_dict["props"]
  60. )