Skip to content

Commit 9a9a772

Browse files
committed
Fixes broken seed TESTOPTS="--seed=17880"
1 parent e1b33b8 commit 9a9a772

File tree

1 file changed

+82
-97
lines changed

1 file changed

+82
-97
lines changed

test/support/webpacker_helpers.rb

Lines changed: 82 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ def compile
2121
return unless available?
2222
clear_webpacker_packs
2323
Dir.chdir("./test/#{DUMMY_LOCATION}") do
24-
# capture_io do
24+
capture_io do
2525
Rake::Task['webpacker:compile'].reenable
2626
Rake::Task['webpacker:compile'].invoke
27-
# end
27+
end
2828
end
2929
# Reload cached JSON manifest:
3030
manifest_refresh
@@ -40,122 +40,107 @@ def clear_webpacker_packs
4040
FileUtils.rm_rf(PACKS_DIRECTORY)
4141
end
4242

43-
if MAJOR < 3
44-
def manifest_refresh
45-
Webpacker::Manifest.load
43+
# Start a webpack-dev-server
44+
# Call the block
45+
# Make sure to clean up the server
46+
def with_dev_server
47+
48+
old_env = ENV['NODE_ENV']
49+
ENV['NODE_ENV'] = 'development'
50+
51+
# Start the server in a forked process:
52+
webpack_dev_server = Dir.chdir("test/#{DUMMY_LOCATION}") do
53+
spawn 'RAILS_ENV=development ./bin/webpack-dev-server '
4654
end
47-
else
48-
def manifest_refresh
49-
Webpacker.manifest.refresh
55+
56+
stop_time = Time.now + 30.seconds
57+
detected_dev_server = false
58+
loop do
59+
detected_dev_server = dev_server_running?
60+
break if detected_dev_server || Time.now > stop_time
61+
sleep 0.5
5062
end
63+
64+
# If we didn't hook up with a dev server after waiting, fail loudly.
65+
raise 'Failed to start dev server' unless detected_dev_server
66+
puts 'Detected dev server - Continuing'
67+
68+
# Call the test block:
69+
yield
70+
71+
ensure
72+
# Kill the server process
73+
puts "Killing webpack dev server"
74+
kill_cmd = "kill -9 #{webpack_dev_server}"
75+
76+
puts kill_cmd
77+
`#{kill_cmd}`
78+
# Remove the dev-server packs:
79+
WebpackerHelpers.clear_webpacker_packs
80+
ENV['NODE_ENV'] = old_env
81+
puts "Killed."
5182
end
5283

53-
if MAJOR < 3
84+
if MAJOR < 3 # Old webpackers
85+
86+
def dev_server_running?
87+
manifest_refresh
88+
example_asset_path = manifest_data.values.first
89+
begin
90+
file = open('http://localhost:8080/packs/application.js')
91+
rescue StandardError => e
92+
file = nil
93+
end
94+
if !example_asset_path.start_with?('http://localhost:8080') && ! file
95+
puts "Manifest doesn't include absolute path to dev server"
96+
return false
97+
end
98+
true
99+
end
100+
101+
def manifest_refresh
102+
Webpacker::Manifest.load
103+
end
104+
54105
def manifest_lookup name
55106
Webpacker::Manifest.load(name)
56107
end
57-
else
58-
def manifest_lookup _
59-
Webpacker.manifest
60-
end
61-
end
62108

63-
if MAJOR < 3
64109
def manifest_data
65110
Webpacker::Manifest.instance.data
66111
end
67-
else
68-
def manifest_data
69-
Webpacker.manifest.refresh
70-
end
71-
end
72112

73-
# Start a webpack-dev-server
74-
# Call the block
75-
# Make sure to clean up the server
76-
def with_dev_server
77-
# Start the server in a forked process:
78-
webpack_dev_server = Dir.chdir("test/#{DUMMY_LOCATION}") do
79-
spawn 'RAILS_ENV=development ./bin/webpack-dev-server '
80-
end
113+
else # New webpackers
81114

82-
detected_dev_server = false
115+
def dev_server_running?
116+
Webpacker.instance.instance_variable_set(:@config, nil)
117+
return false unless Webpacker.dev_server.running?
83118

84-
# Wait for it to start up, make sure it's there by connecting to it:
85-
30.times do |i|
119+
ds = Webpacker.dev_server
120+
example_asset_path = manifest_data.values.first
86121
begin
87-
# Make sure that the manifest has been updated:
88-
manifest_lookup("./test/#{DUMMY_LOCATION}/public/packs/manifest.json")
89-
example_asset_path = manifest_data.values.first
90-
if example_asset_path.nil?
91-
# Debug helper
92-
# puts "Manifest is blank, all manifests:"
93-
# Dir.glob("./test/#{DUMMY_LOCATION}/public/packs/*.json").each do |f|
94-
# puts f
95-
# puts File.read(f)
96-
# end
97-
next
98-
end
99-
# Make sure the dev server is up:
100-
if MAJOR < 3
101-
file = open('http://localhost:8080/packs/application.js')
102-
if !example_asset_path.start_with?('http://localhost:8080') && ! file
103-
raise "Manifest doesn't include absolute path to dev server"
104-
end
105-
else
106-
# Webpacker proxies the dev server when Rails is running in Webpacker 3
107-
# so the manifest doens't have absolute paths anymore..
108-
# Reload webpacker config.
109-
old_env = ENV['NODE_ENV']
110-
ENV['NODE_ENV'] = 'development'
111-
Webpacker.instance.instance_variable_set(:@config, nil)
112-
Webpacker.config
113-
running = Webpacker.dev_server.running?
114-
ENV['NODE_ENV'] = old_env
115-
raise "Webpack Dev Server hasn't started yet" unless running
116-
end
117-
118-
detected_dev_server = true
119-
break
120-
rescue StandardError => err
121-
puts err.message
122-
ensure
123-
sleep 0.5
124-
# debug counter
125-
# puts i
122+
file = open("#{ds.protocol}://#{ds.host}:#{ds.port}#{example_asset_path}")
123+
rescue StandardError => e
124+
file = nil
126125
end
126+
if ! file
127+
puts "Dev server is not serving assets yet"
128+
return false
129+
end
130+
true
127131
end
128132

129-
# If we didn't hook up with a dev server after waiting, fail loudly.
130-
unless detected_dev_server
131-
raise 'Failed to start dev server'
133+
def manifest_refresh
134+
Webpacker.manifest.refresh
132135
end
133136

134-
# Call the test block:
135-
yield
136-
ensure
137-
# Kill the server process
138-
# puts "Killing webpack dev server"
139-
check_cmd = 'lsof -i :8080 -S'
140-
10.times do
141-
# puts check_cmd
142-
status = `#{check_cmd}`
143-
# puts status
144-
remaining_pid_match = status.match(/\n[a-z]+\s+(\d+)/)
145-
if remaining_pid_match
146-
remaining_pid = remaining_pid_match[1]
147-
# puts "Remaining #{remaining_pid}"
148-
kill_cmd = "kill -9 #{remaining_pid}"
149-
# puts kill_cmd
150-
`#{kill_cmd}`
151-
sleep 0.5
152-
else
153-
break
154-
end
137+
def manifest_lookup _
138+
Webpacker.manifest
139+
end
140+
141+
def manifest_data
142+
Webpacker.manifest.refresh
155143
end
156144

157-
# Remove the dev-server packs:
158-
WebpackerHelpers.clear_webpacker_packs
159-
# puts "Killed."
160145
end
161146
end

0 commit comments

Comments
 (0)