test_script.py 1.9 KB

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