1+ require 'test_helper'
2+
3+ class NullRenderer
4+ def initialize ( options )
5+ # in this case, options is actually a string (just for testing)
6+ @name = options
7+ end
8+
9+ def render ( component_name , props )
10+ "#{ @name } rendered #{ component_name } with #{ props } "
11+ end
12+ end
13+
14+ class ReactServerRenderingTest < ActiveSupport ::TestCase
15+ setup do
16+ React ::ServerRendering . renderer_options = "TEST"
17+ React ::ServerRendering . renderer = NullRenderer
18+ React ::ServerRendering . reset_pool
19+ end
20+
21+ test '.create_renderer makes a renderer with initialization options' do
22+ mock_renderer = MiniTest ::Mock . new
23+ mock_renderer . expect ( :new , :fake_renderer , [ { mock : true } ] )
24+ React ::ServerRendering . renderer = mock_renderer
25+ React ::ServerRendering . renderer_options = { mock : true }
26+ renderer = React ::ServerRendering . create_renderer
27+ assert_equal ( :fake_renderer , renderer )
28+ end
29+
30+ test '.render returns a rendered string' do
31+ props = { "props" => true }
32+ result = React ::ServerRendering . render ( "MyComponent" , props )
33+ assert_equal ( "TEST rendered MyComponent with #{ props } " , result )
34+ end
35+
36+ test '.reset_pool forgets old renderers' do
37+ # At first, they use the first options:
38+ assert_match ( /^TEST/ , React ::ServerRendering . render ( nil , nil ) )
39+ assert_match ( /^TEST/ , React ::ServerRendering . render ( nil , nil ) )
40+
41+ # Then change the init options and clear the pool:
42+ React ::ServerRendering . renderer_options = "DIFFERENT"
43+ React ::ServerRendering . reset_pool
44+ # New renderers are created with the new init options:
45+ assert_match ( /^DIFFERENT/ , React ::ServerRendering . render ( nil , nil ) )
46+ assert_match ( /^DIFFERENT/ , React ::ServerRendering . render ( nil , nil ) )
47+ end
48+ end
0 commit comments