44 class ReactRailsUJSTest < ActionDispatch ::IntegrationTest
55 include Capybara ::DSL
66
7+ compiled = false
78 setup do
8- Capybara . current_driver = Capybara . javascript_driver
9- WebpackerHelpers . compile_if_missing
9+ if !compiled
10+ React ::ServerRendering . reset_pool
11+ WebpackerHelpers . compile
12+ end
13+ end
14+
15+ # Normalize for webpacker check:
16+ def assert_greeting ( page , plain_greeting , refute : false )
17+ normalized_greeting = if WebpackerHelpers . available?
18+ greeting , name = plain_greeting . split ( " " )
19+ "#{ greeting } from Webpacker #{ name } "
20+ else
21+ plain_greeting
22+ end
23+
24+ if refute
25+ assert page . has_no_content? ( normalized_greeting ) , page . body
26+ else
27+ assert page . has_content? ( normalized_greeting ) , page . body
28+ end
29+ end
30+
31+ def refute_greeting ( page , greeting )
32+ assert_greeting ( page , greeting , refute : true )
1033 end
1134
1235 test 'ujs object present on the global React object and has our methods' do
1336 visit '/pages/1'
14- assert page . has_content? ( 'Hello Bob' )
37+ assert_greeting ( page , 'Hello Bob' )
1538
1639 # the exposed ujs object is present
1740 ujs_present = page . evaluate_script ( 'typeof ReactRailsUJS === "object";' )
@@ -34,82 +57,82 @@ class ReactRailsUJSTest < ActionDispatch::IntegrationTest
3457
3558 test 'react_ujs works with rendered HTML' do
3659 visit '/pages/1'
37- assert page . has_content? ( 'Hello Bob' )
60+ assert_greeting ( page , 'Hello Bob' )
3861
3962 page . click_button 'Goodbye'
40- assert page . has_no_content? ( 'Hello Bob' )
41- assert page . has_content? ( 'Goodbye Bob' )
63+ refute_greeting ( page , 'Hello Bob' )
64+ assert_greeting ( page , 'Goodbye Bob' )
4265 end
4366
4467 test 'react_ujs works with Turbolinks' do
4568 visit '/pages/1'
46- assert page . has_content? ( 'Hello Bob' )
69+ assert_greeting ( page , 'Hello Bob' )
4770 assert page . evaluate_script ( "Turbolinks.supported" )
4871
4972 # Try clicking links.
5073 page . click_link ( 'Alice' )
5174 wait_for_turbolinks_to_be_available
52- assert page . has_content? ( 'Hello Alice' )
75+ assert_greeting ( page , 'Hello Alice' )
5376
5477 page . click_link ( 'Bob' )
5578 wait_for_turbolinks_to_be_available
56- assert page . has_content? ( 'Hello Bob' )
79+ assert_greeting ( page , 'Hello Bob' )
5780
5881 # Try going back.
5982 page . execute_script ( 'history.back();' )
6083 wait_for_turbolinks_to_be_available
61- assert page . has_content? ( 'Hello Alice' )
84+ assert_greeting ( page , 'Hello Alice' )
6285
6386 # Try Turbolinks javascript API.
6487 page . execute_script ( 'Turbolinks.visit("/pages/2");' )
6588 wait_for_turbolinks_to_be_available
66- assert page . has_content? ( 'Hello Alice' )
89+ assert_greeting ( page , 'Hello Alice' )
6790
6891
6992 page . execute_script ( 'Turbolinks.visit("/pages/1");' )
7093 wait_for_turbolinks_to_be_available
71- assert page . has_content? ( 'Hello Bob' )
94+ assert_greeting ( page , 'Hello Bob' )
7295
7396 # Component state is not persistent after clicking current page link.
7497 page . click_button 'Goodbye'
75- assert page . has_content? ( 'Goodbye Bob' )
98+ assert_greeting ( page , 'Goodbye Bob' )
7699
77100 page . click_link ( 'Bob' )
78101 wait_for_turbolinks_to_be_available
79- assert page . has_content? ( 'Hello Bob' )
102+ assert_greeting ( page , 'Hello Bob' )
80103 end
81104
82105 test 'react_ujs can unmount/mount using a selector reference for a component parent' do
83106 visit '/pages/1'
84- assert page . has_content? ( 'Hello Bob' ) , page . body
107+ assert_greeting ( page , 'Hello Bob' )
85108
86109 page . click_button "Unmount by parent selector"
87- assert page . has_no_content? ( 'Hello Bob' ) , page . body
110+ refute_greeting ( page , 'Hello Bob' )
88111
89112 page . click_button "Mount by parent selector"
90- assert page . has_content? ( 'Hello Bob' ) , page . body
113+ assert_greeting ( page , 'Hello Bob' )
91114 end
92115
93116 test 'react_ujs can unmount/mount using a selector reference for the component' do
94117 visit '/pages/1'
95- assert page . has_content? ( 'Hello Bob' ) , page . body
118+ assert_greeting ( page , 'Hello Bob' )
96119
97120 page . click_button "Unmount by own selector"
98- assert page . has_no_content? ( 'Hello Bob' ) , page . body
121+ refute_greeting ( page , 'Hello Bob' )
99122
100123 page . click_button "Mount by own selector"
101- assert page . has_content? ( 'Hello Bob' ) , page . body
124+ assert_greeting ( page , 'Hello Bob' )
102125 end
103126
104127 test 'react_ujs can unmount/mount using a dom node context' do
105128 visit '/pages/1'
106- assert page . has_content? ( 'Hello Bob' ) , page . body
129+ assert_greeting ( page , 'Hello Bob' )
107130
108131 page . click_button "Unmount by parent node"
109- assert page . has_no_content? ( 'Hello Bob' ) , page . body
132+ refute_greeting ( page , 'Hello Bob' )
110133
111134 page . click_button "Mount by parent node"
112- assert page . has_content? ( 'Hello Bob' ) , page . body
135+ assert_greeting ( page , 'Hello Bob' )
113136 end
114137
115138 test 'react server rendering also gets mounted on client' do
0 commit comments