44 class SprocketsRendererTest < ActiveSupport ::TestCase
55 CALLBACKS = [ :before_render , :after_render ]
66
7+ webpacker_compiled = false
78 setup do
9+ if WebpackerHelpers . available? && !webpacker_compiled
10+ WebpackerHelpers . compile
11+ webpacker_compiled = true
12+ end
813 @renderer = React ::ServerRendering ::SprocketsRenderer . new ( { } )
914 end
1015
@@ -62,8 +67,14 @@ class SprocketsRendererTest < ActiveSupport::TestCase
6267 err = assert_raises React ::ServerRendering ::PrerenderError do
6368 @renderer . render ( "NonExistentComponent" , { } , nil )
6469 end
65- assert_match ( /ReferenceError/ , err . to_s )
66- assert_match ( /NonExistentComponent/ , err . to_s , "it names the component" )
70+
71+ if WebpackerHelpers . available?
72+ assert_includes err . message , "Cannot find module './NonExistentComponent'"
73+ else
74+ assert_match ( /ReferenceError/ , err . to_s )
75+ assert_match ( /NonExistentComponent/ , err . to_s , "it names the component" )
76+ end
77+
6778 assert_match ( /\n / , err . to_s , "it includes the multi-line backtrace" )
6879 end
6980
@@ -86,35 +97,36 @@ class SprocketsRendererTest < ActiveSupport::TestCase
8697
8798 assert_match ( /drink more caffeine<\/ span>/ , additional_renderer . render ( "WithoutSprockets" , { label : "drink more caffeine" } , nil ) )
8899 end
89- end
90100
91- test '.new accepts any filenames' do
92- limited_renderer = React ::ServerRendering ::SprocketsRenderer . new ( files : [ "react-server.js" , "react_ujs.js" , "components/Todo.js" ] )
93- assert_match ( /get a real job<\/ li>/ , limited_renderer . render ( "Todo" , { todo : "get a real job" } , nil ) )
94- err = assert_raises React ::ServerRendering ::PrerenderError do
95- limited_renderer . render ( "TodoList" , { todos : [ ] } , nil )
101+ # These use cases don't apply to Webpacker since the require.context comes from a pack:
102+ test '.new accepts any filenames' do
103+ limited_renderer = React ::ServerRendering ::SprocketsRenderer . new ( files : [ "react-server.js" , "react_ujs.js" , "components/Todo.js" ] )
104+ assert_match ( /get a real job<\/ li>/ , limited_renderer . render ( "Todo" , { todo : "get a real job" } , nil ) )
105+ err = assert_raises React ::ServerRendering ::PrerenderError do
106+ limited_renderer . render ( "TodoList" , { todos : [ ] } , nil )
107+ end
108+ assert_match ( /ReferenceError/ , err . to_s , "it doesnt load other files" )
96109 end
97- assert_match ( /ReferenceError/ , err . to_s , "it doesnt load other files" )
98- end
99110
100- test '#render returns html when config.assets.compile is false' do
101- begin
102- legacy_rendering_files = [ "react-server.js" , "react_ujs.js" , "components.js" ]
103- Rails . application . config . assets . precompile += legacy_rendering_files
111+ test '#render returns html when config.assets.compile is false' do
112+ begin
113+ legacy_rendering_files = [ "react-server.js" , "react_ujs.js" , "components.js" ]
114+ Rails . application . config . assets . precompile += legacy_rendering_files
104115
105- precompile_assets
116+ precompile_assets
106117
107- Rails . application . config . assets . compile = false
118+ Rails . application . config . assets . compile = false
108119
109- @renderer = React ::ServerRendering ::SprocketsRenderer . new ( files : legacy_rendering_files )
120+ @renderer = React ::ServerRendering ::SprocketsRenderer . new ( files : legacy_rendering_files )
110121
111- result = @renderer . render ( "Todo" , { todo : "write tests" } , nil )
112- assert_match ( /<li.*write tests<\/ li>/ , result )
113- assert_match ( /data-react-checksum/ , result )
114- ensure
115- Rails . application . config . assets . compile = true
122+ result = @renderer . render ( "Todo" , { todo : "write tests" } , nil )
123+ assert_match ( /<li.*write tests<\/ li>/ , result )
124+ assert_match ( /data-react-checksum/ , result )
125+ ensure
126+ Rails . application . config . assets . compile = true
116127
117- clear_precompiled_assets
128+ clear_precompiled_assets
129+ end
118130 end
119131 end
120132 end
0 commit comments