1
+ require 'test_helper'
2
+
3
+ DUMMY_IMPLEMENTATION = "
4
+ var Todo = null
5
+ var React = {
6
+ renderToString: function() {
7
+ return 'renderToString was called'
8
+ },
9
+ createElement: function() {}
10
+ }
11
+ "
12
+
13
+ class ExecJSRendererTest < ActiveSupport ::TestCase
14
+ setup do
15
+ react_source = Rails . application . assets [ "react.js" ] . to_s
16
+ todo_component_source = Rails . application . assets [ "components/Todo.js" ] . to_s
17
+ @renderer = React ::ServerRendering ::ExecJSRenderer . new ( code : react_source + todo_component_source )
18
+ end
19
+
20
+ test '#render returns HTML' do
21
+ result = @renderer . render ( "Todo" , { todo : "write tests" } . to_json , { } )
22
+ assert_match ( /<li.*write tests<\/ li>/ , result )
23
+ assert_match ( /data-react-checksum/ , result )
24
+ end
25
+
26
+ test '#render accepts render_function:' do
27
+ result = @renderer . render ( "Todo" , { todo : "write more tests" } . to_json , render_function : "renderToStaticMarkup" )
28
+ assert_match ( /<li>write more tests<\/ li>/ , result )
29
+ assert_no_match ( /data-react-checksum/ , result )
30
+ end
31
+
32
+ test '#before_render is called before #after_render' do
33
+ def @renderer . before_render ( name , props , opts )
34
+ "throw 'before_render ' + afterRenderVar"
35
+ end
36
+
37
+ def @renderer . after_render ( name , props , opts )
38
+ "var afterRenderVar = 'assigned_after_render'"
39
+ end
40
+
41
+ error = assert_raises ( React ::ServerRendering ::PrerenderError ) do
42
+ @renderer . render ( "Todo" , { todo : "write tests" } . to_json , { } )
43
+ end
44
+
45
+ assert_match ( /before_render/ , error . message )
46
+ assert_no_match ( /assigned_after_render/ , error . message )
47
+ end
48
+
49
+
50
+ test '#after_render is called after #before_render' do
51
+ def @renderer . before_render ( name , props , opts )
52
+ "var beforeRenderVar = 'assigned_before_render'"
53
+ end
54
+
55
+ def @renderer . after_render ( name , props , opts )
56
+ "throw 'after_render ' + beforeRenderVar"
57
+ end
58
+
59
+ error = assert_raises ( React ::ServerRendering ::PrerenderError ) do
60
+ @renderer . render ( "Todo" , { todo : "write tests" } . to_json , { } )
61
+ end
62
+
63
+ assert_match ( /after_render/ , error . message )
64
+ assert_match ( /assigned_before_render/ , error . message )
65
+ end
66
+
67
+ test '.new accepts code:' do
68
+ dummy_renderer = React ::ServerRendering ::ExecJSRenderer . new ( code : DUMMY_IMPLEMENTATION )
69
+ result = dummy_renderer . render ( "Todo" , { todo : "get a real job" } . to_json , { } )
70
+ assert_equal ( "renderToString was called" , result )
71
+ end
72
+ end
0 commit comments