@@ -7,7 +7,45 @@ class SprocketsRendererTest < ActiveSupport::TestCase
7
7
8
8
test '#render returns HTML' do
9
9
result = @renderer . render ( "Todo" , { todo : "write tests" } )
10
- # skip reactid & checksum:
11
10
assert_match ( /<li.*write tests<\/ li>/ , result )
11
+ assert_match ( /data-react-checksum/ , result )
12
+ end
13
+
14
+ test '#render accepts strings' do
15
+ result = @renderer . render ( "Todo" , { todo : "write more tests" } . to_json )
16
+ assert_match ( /<li.*write more tests<\/ li>/ , result )
17
+ end
18
+
19
+ test '#render replays console messages' do
20
+ result = @renderer . render ( "TodoListWithConsoleLog" , { todos : [ "log some messages" ] } )
21
+ assert_match ( 'console.log.apply(console, ["got initial state"])' , result )
22
+ assert_match ( 'console.warn.apply(console, ["mounted component"])' , result )
23
+ assert_match ( 'console.error.apply(console, ["rendered!","foo"])' , result )
24
+ end
25
+
26
+ test '#render console messages can be disabled' do
27
+ no_log_renderer = React ::ServerRendering ::SprocketsRenderer . new ( { replay_console : false } )
28
+ result = no_log_renderer . render ( "TodoListWithConsoleLog" , { todos : [ "log some messages" ] } )
29
+ assert_no_match ( 'console.log.apply(console, ["got initial state"])' , result )
30
+ assert_no_match ( 'console.warn.apply(console, ["mounted component"])' , result )
31
+ assert_no_match ( 'console.error.apply(console, ["rendered!","foo"])' , result )
32
+ end
33
+
34
+ test '#render errors include stack traces' do
35
+ err = assert_raises React ::ServerRendering ::SprocketsRenderer ::PrerenderError do
36
+ @renderer . render ( "NonExistentComponent" , { } )
37
+ end
38
+ assert_match ( "ReferenceError" , err . to_s )
39
+ assert_match ( "NonExistentComponent" , err . to_s , "it names the component" )
40
+ assert_match ( /\n / , err . to_s , "it includes the multi-line backtrace" )
41
+ end
42
+
43
+ test '.new accepts any filenames' do
44
+ limited_renderer = React ::ServerRendering ::SprocketsRenderer . new ( files : [ "react.js" , "components/Todo.js" ] )
45
+ assert_match ( "get a real job</li>" , limited_renderer . render ( "Todo" , { todo : "get a real job" } ) )
46
+ err = assert_raises React ::ServerRendering ::SprocketsRenderer ::PrerenderError do
47
+ limited_renderer . render ( "TodoList" , { todos : [ ] } )
48
+ end
49
+ assert_match ( "ReferenceError" , err . to_s , "it doesnt load other files" )
12
50
end
13
51
end
0 commit comments