File tree Expand file tree Collapse file tree 2 files changed +16
-6
lines changed Expand file tree Collapse file tree 2 files changed +16
-6
lines changed Original file line number Diff line number Diff line change 33module React
44 class Renderer
55
6+ class PrerenderError < RuntimeError
7+ def initialize ( component_name , props , js_message )
8+ message = "Encountered error \" #{ js_message } \" when prerendering #{ component_name } with #{ props . to_json } "
9+ super ( message )
10+ end
11+ end
12+
613 cattr_accessor :pool
714
815 def self . setup! ( react_js , components_js , args = { } )
@@ -58,13 +65,8 @@ def render(component, args={})
5865 }()
5966 JS
6067 context . eval ( jscode ) . html_safe
61- # What should be done here? If we are server rendering, and encounter an error in the JS code,
62- # then log it and continue, which will just render the react ujs tag, and when the browser tries
63- # to render the component it will most likely encounter the same error and throw to the browser
64- # console for a better debugging experience.
6568 rescue ExecJS ::ProgramError => e
66- :: Rails . logger . error "[React::Renderer] #{ e . message } "
69+ raise PrerenderError . new ( component , args , e )
6770 end
68-
6971 end
7072end
Original file line number Diff line number Diff line change @@ -15,4 +15,12 @@ class ReactRendererTest < ActiveSupport::TestCase
1515 end
1616 end
1717 end
18+
19+ test 'prerender errors are thrown' do
20+ err = assert_raises React ::Renderer ::PrerenderError do
21+ React ::Renderer . render ( "NonexistentComponent" , { error : true , exists : false } )
22+ end
23+ expected_message = 'Encountered error "ReferenceError: NonexistentComponent is not defined" when prerendering NonexistentComponent with {"error":true,"exists":false}'
24+ assert_equal expected_message , err . message
25+ end
1826end
You can’t perform that action at this time.
0 commit comments