hyper-spec 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +7 -0
- data/.rubocop.yml +107 -0
- data/Gemfile.lock +31 -20
- data/README.md +5 -0
- data/hyper-spec.gemspec +49 -45
- data/lib/hyper-spec.rb +54 -252
- data/lib/hyper-spec/component_test_helpers.rb +306 -0
- data/lib/hyper-spec/lolex.rb +66 -0
- data/lib/hyper-spec/{engine.rb → rails/engine.rb} +1 -0
- data/lib/hyper-spec/time_cop.rb +30 -99
- data/lib/hyper-spec/version.rb +1 -1
- data/lib/hyper-spec/wait_for_ajax.rb +30 -0
- data/lib/react/isomorphic_helpers.rb +7 -0
- data/lib/react/top_level_rails_component.rb +104 -0
- data/lib/selenium/web_driver/firefox/profile.rb +55 -0
- data/vendor/assets/javascripts/time_cop.rb +7 -10
- metadata +97 -75
- data/play.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a644db6a221bc30f343b05e079c705269a90871d
|
4
|
+
data.tar.gz: f6c9c28bbb47e6e39c5f7f3b88304da9df0ac8b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de46555fb469983fba0b02f24fdd2439826f4dbca419b1e2fe53281fa62ed9512a077ec579900c0638ac1d85ac7d5f4ce130e8168c1b14343cc06775ae4c0872
|
7
|
+
data.tar.gz: ac2b3168d21fa3993e0af01f25fc5fe4129532a8f77cf4ff167092355d17be25d0a587286c9188bebee650a3e785c718bf1e39bc943c9227dcdb1503381956f0
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
Style/BlockDelimiters:
|
2
|
+
EnforcedStyle: line_count_based
|
3
|
+
SupportedStyles:
|
4
|
+
# The `line_count_based` style enforces braces around single line blocks and
|
5
|
+
# do..end around multi-line blocks.
|
6
|
+
- line_count_based
|
7
|
+
# The `semantic` style enforces braces around functional blocks, where the
|
8
|
+
# primary purpose of the block is to return a value and do..end for
|
9
|
+
# procedural blocks, where the primary purpose of the block is its
|
10
|
+
# side-effects.
|
11
|
+
#
|
12
|
+
# This looks at the usage of a block's method to determine its type (e.g. is
|
13
|
+
# the result of a `map` assigned to a variable or passed to another
|
14
|
+
# method) but exceptions are permitted in the `ProceduralMethods`,
|
15
|
+
# `FunctionalMethods` and `IgnoredMethods` sections below.
|
16
|
+
- semantic
|
17
|
+
# The `braces_for_chaining` style enforces braces around single line blocks
|
18
|
+
# and do..end around multi-line blocks, except for multi-line blocks whose
|
19
|
+
# return value is being chained with another method (in which case braces
|
20
|
+
# are enforced).
|
21
|
+
- braces_for_chaining
|
22
|
+
ProceduralMethods:
|
23
|
+
# Methods that are known to be procedural in nature but look functional from
|
24
|
+
# their usage, e.g.
|
25
|
+
#
|
26
|
+
# time = Benchmark.realtime do
|
27
|
+
# foo.bar
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# Here, the return value of the block is discarded but the return value of
|
31
|
+
# `Benchmark.realtime` is used.
|
32
|
+
- benchmark
|
33
|
+
- bm
|
34
|
+
- bmbm
|
35
|
+
- create
|
36
|
+
- each_with_object
|
37
|
+
- measure
|
38
|
+
- new
|
39
|
+
- realtime
|
40
|
+
- tap
|
41
|
+
- with_object
|
42
|
+
FunctionalMethods:
|
43
|
+
# Methods that are known to be functional in nature but look procedural from
|
44
|
+
# their usage, e.g.
|
45
|
+
#
|
46
|
+
# let(:foo) { Foo.new }
|
47
|
+
#
|
48
|
+
# Here, the return value of `Foo.new` is used to define a `foo` helper but
|
49
|
+
# doesn't appear to be used from the return value of `let`.
|
50
|
+
- let
|
51
|
+
- let!
|
52
|
+
- subject
|
53
|
+
- watch
|
54
|
+
IgnoredMethods:
|
55
|
+
# Methods that can be either procedural or functional and cannot be
|
56
|
+
# categorised from their usage alone, e.g.
|
57
|
+
#
|
58
|
+
# foo = lambda do |x|
|
59
|
+
# puts "Hello, #{x}"
|
60
|
+
# end
|
61
|
+
#
|
62
|
+
# foo = lambda do |x|
|
63
|
+
# x * 100
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# Here, it is impossible to tell from the return value of `lambda` whether
|
67
|
+
# the inner block's return value is significant.
|
68
|
+
- lambda
|
69
|
+
- proc
|
70
|
+
- it
|
71
|
+
|
72
|
+
Style/Documentation:
|
73
|
+
Description: 'Document classes and non-namespace modules.'
|
74
|
+
Enabled: false
|
75
|
+
Exclude:
|
76
|
+
- 'spec/**/*'
|
77
|
+
- 'test/**/*'
|
78
|
+
|
79
|
+
# Multi-line method chaining should be done with trailing dots.
|
80
|
+
Style/DotPosition:
|
81
|
+
EnforcedStyle: leading
|
82
|
+
SupportedStyles:
|
83
|
+
- leading
|
84
|
+
- trailing
|
85
|
+
|
86
|
+
Style/FrozenStringLiteralComment:
|
87
|
+
Description: >-
|
88
|
+
Add the frozen_string_literal comment to the top of files
|
89
|
+
to help transition from Ruby 2.3.0 to Ruby 3.0.
|
90
|
+
Enabled: false
|
91
|
+
|
92
|
+
Style/MultilineBlockChain:
|
93
|
+
Description: 'Avoid multi-line chains of blocks.'
|
94
|
+
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks'
|
95
|
+
Enabled: false
|
96
|
+
|
97
|
+
Style/MutableConstant:
|
98
|
+
Description: 'Do not assign mutable objects to constants.'
|
99
|
+
Enabled: false
|
100
|
+
|
101
|
+
Metrics/AbcSize:
|
102
|
+
# The ABC size is a calculated magnitude, so this number can be a Fixnum or
|
103
|
+
# a Float.
|
104
|
+
Max: 20
|
105
|
+
|
106
|
+
Metrics/LineLength:
|
107
|
+
Max: 100
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
hyper-spec (0.1.
|
5
|
-
|
6
|
-
|
4
|
+
hyper-spec (0.1.2)
|
5
|
+
capybara
|
6
|
+
opal
|
7
|
+
parser
|
8
|
+
poltergeist
|
9
|
+
pry
|
10
|
+
rspec-rails
|
11
|
+
selenium-webdriver (= 2.53.4)
|
12
|
+
timecop
|
13
|
+
unparser (= 0.2.5)
|
7
14
|
|
8
15
|
GEM
|
9
16
|
remote: https://rubygems.org/
|
@@ -60,14 +67,14 @@ GEM
|
|
60
67
|
babel-source (>= 4.0, < 6)
|
61
68
|
execjs (~> 2.0)
|
62
69
|
builder (3.2.3)
|
63
|
-
capybara (2.
|
70
|
+
capybara (2.13.0)
|
64
71
|
addressable
|
65
72
|
mime-types (>= 1.16)
|
66
73
|
nokogiri (>= 1.3.3)
|
67
74
|
rack (>= 1.0.0)
|
68
75
|
rack-test (>= 0.5.4)
|
69
76
|
xpath (~> 2.0)
|
70
|
-
childprocess (0.6.
|
77
|
+
childprocess (0.6.2)
|
71
78
|
ffi (~> 1.0, >= 1.0.11)
|
72
79
|
chromedriver-helper (1.0.0)
|
73
80
|
archive-zip (~> 0.7.0)
|
@@ -84,7 +91,7 @@ GEM
|
|
84
91
|
equalizer (0.0.11)
|
85
92
|
erubis (2.7.0)
|
86
93
|
execjs (2.7.0)
|
87
|
-
ffi (1.9.
|
94
|
+
ffi (1.9.18)
|
88
95
|
globalid (0.3.7)
|
89
96
|
activesupport (>= 4.1.0)
|
90
97
|
hike (1.2.3)
|
@@ -142,17 +149,18 @@ GEM
|
|
142
149
|
paggio (0.2.6)
|
143
150
|
parser (2.3.3.1)
|
144
151
|
ast (~> 2.2)
|
145
|
-
poltergeist (1.
|
152
|
+
poltergeist (1.14.0)
|
146
153
|
capybara (~> 2.1)
|
147
154
|
cliver (~> 0.3.1)
|
148
155
|
websocket-driver (>= 0.2.0)
|
156
|
+
powerpack (0.1.1)
|
149
157
|
procto (0.0.3)
|
150
158
|
pry (0.10.4)
|
151
159
|
coderay (~> 1.1.0)
|
152
160
|
method_source (~> 0.8.1)
|
153
161
|
slop (~> 3.4)
|
154
162
|
public_suffix (2.0.5)
|
155
|
-
puma (3.
|
163
|
+
puma (3.7.0)
|
156
164
|
rack (2.0.1)
|
157
165
|
rack-test (0.6.3)
|
158
166
|
rack (>= 1.0)
|
@@ -179,6 +187,7 @@ GEM
|
|
179
187
|
method_source
|
180
188
|
rake (>= 0.8.7)
|
181
189
|
thor (>= 0.18.1, < 2.0)
|
190
|
+
rainbow (2.2.1)
|
182
191
|
rake (10.5.0)
|
183
192
|
react-rails (1.4.2)
|
184
193
|
babel-transpiler (>= 0.7.0)
|
@@ -192,7 +201,7 @@ GEM
|
|
192
201
|
rspec-core (~> 3.5.0)
|
193
202
|
rspec-expectations (~> 3.5.0)
|
194
203
|
rspec-mocks (~> 3.5.0)
|
195
|
-
rspec-collection_matchers (1.1.
|
204
|
+
rspec-collection_matchers (1.1.3)
|
196
205
|
rspec-expectations (>= 2.99.0.beta1)
|
197
206
|
rspec-core (3.5.4)
|
198
207
|
rspec-support (~> 3.5.0)
|
@@ -216,7 +225,14 @@ GEM
|
|
216
225
|
rspec-steps (2.1.1)
|
217
226
|
rspec (>= 3.0, < 3.99)
|
218
227
|
rspec-support (3.5.0)
|
219
|
-
|
228
|
+
rubocop (0.47.1)
|
229
|
+
parser (>= 2.3.3.1, < 3.0)
|
230
|
+
powerpack (~> 0.1)
|
231
|
+
rainbow (>= 1.99.1, < 3.0)
|
232
|
+
ruby-progressbar (~> 1.7)
|
233
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
234
|
+
ruby-progressbar (1.8.1)
|
235
|
+
rubyzip (1.2.1)
|
220
236
|
selenium-webdriver (2.53.4)
|
221
237
|
childprocess (~> 0.5)
|
222
238
|
rubyzip (~> 1.0)
|
@@ -224,7 +240,7 @@ GEM
|
|
224
240
|
shoulda (3.5.0)
|
225
241
|
shoulda-context (~> 1.0, >= 1.0.1)
|
226
242
|
shoulda-matchers (>= 1.4.1, < 3.0)
|
227
|
-
shoulda-context (1.2.
|
243
|
+
shoulda-context (1.2.2)
|
228
244
|
shoulda-matchers (2.8.0)
|
229
245
|
activesupport (>= 3.0.0)
|
230
246
|
slop (3.6.0)
|
@@ -249,6 +265,7 @@ GEM
|
|
249
265
|
timecop (0.8.1)
|
250
266
|
tzinfo (1.2.2)
|
251
267
|
thread_safe (~> 0.1)
|
268
|
+
unicode-display_width (1.1.3)
|
252
269
|
unparser (0.2.5)
|
253
270
|
abstract_type (~> 0.0.7)
|
254
271
|
adamantium (~> 0.2.0)
|
@@ -269,32 +286,26 @@ PLATFORMS
|
|
269
286
|
|
270
287
|
DEPENDENCIES
|
271
288
|
bundler (~> 1.12)
|
272
|
-
capybara
|
273
289
|
chromedriver-helper
|
290
|
+
hyper-react (>= 0.10.0)
|
274
291
|
hyper-spec!
|
275
292
|
method_source
|
276
293
|
opal-browser
|
277
294
|
opal-rails
|
278
|
-
parser
|
279
|
-
poltergeist
|
280
|
-
pry
|
281
295
|
puma
|
282
296
|
rails (~> 5.0.0)
|
283
297
|
rake (~> 10.0)
|
284
|
-
react-rails (
|
298
|
+
react-rails (< 1.10.0)
|
285
299
|
rspec-collection_matchers
|
286
300
|
rspec-expectations
|
287
301
|
rspec-its
|
288
302
|
rspec-mocks
|
289
|
-
rspec-rails
|
290
303
|
rspec-steps
|
291
|
-
|
304
|
+
rubocop
|
292
305
|
shoulda
|
293
306
|
shoulda-matchers
|
294
307
|
spring-commands-rspec
|
295
308
|
therubyracer (= 0.12.2)
|
296
|
-
timecop
|
297
|
-
unparser (= 0.2.5)
|
298
309
|
|
299
310
|
BUNDLED WITH
|
300
311
|
1.12.5
|
data/README.md
CHANGED
@@ -350,6 +350,11 @@ See the Timecop [README](https://github.com/travisjeffery/timecop/blob/master/RE
|
|
350
350
|
|
351
351
|
There is one confusing thing to note: On the server if you `sleep` then you will sleep for the specified number of seconds when viewed *outside* of the test. However inside the test environment if you look at Time.now, you will see it advancing according to the scale factor. Likewise if you have a `after` or `every` block on the client, you will wait according to *simulated* time.
|
352
352
|
|
353
|
+
## Common Problems
|
354
|
+
|
355
|
+
If you are getting failures on Poltergeist but not Firefox, make sure you are not requiring `browser` in your components.rb.
|
356
|
+
Requiring `browser/interval` or `browser/delay` is okay.
|
357
|
+
|
353
358
|
## Development
|
354
359
|
|
355
360
|
After checking out the repo, run bundle install and you should be good to go.
|
data/hyper-spec.gemspec
CHANGED
@@ -1,68 +1,72 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
lib = File.expand_path('../lib/', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
require 'hyper-spec/version'
|
5
5
|
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
6
|
+
Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
|
7
|
+
spec.name = 'hyper-spec'
|
8
8
|
spec.version = HyperSpec::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['catmando', 'adamcreekroad']
|
10
|
+
spec.email = ['mitch@catprint.com']
|
11
11
|
|
12
|
-
spec.summary =
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
spec.summary =
|
13
|
+
'Drive your Hyperloop client and server specs from RSpec and Capybara'
|
14
|
+
spec.description =
|
15
|
+
'A Hyperloop application consists of isomorphic React Components, '\
|
16
|
+
'Active Record Models, Stores, Operations and Policiespec. '\
|
17
|
+
'Test them all from Rspec, regardless if the code runs on the client or server.'
|
18
|
+
spec.homepage = 'https://github.com/ruby-hyperloop/hyper-spec'
|
19
|
+
spec.license = 'MIT'
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
spec.
|
21
|
-
spec.require_paths = ["lib"]
|
22
|
-
|
23
|
-
spec.add_development_dependency "bundler", "~> 1.12"
|
24
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
21
|
+
# Prevent pushing this gem to RubyGemspec.org. To allow pushes either set the 'allowed_push_host'
|
22
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
23
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
25
24
|
|
26
|
-
spec.
|
25
|
+
spec.files =
|
26
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
|
+
spec.bindir = 'exe'
|
28
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
|
+
spec.require_paths = ['lib']
|
27
30
|
|
28
|
-
|
31
|
+
# Test app dependencies
|
32
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
33
|
+
spec.add_development_dependency 'hyper-react', '>= 0.10.0'
|
34
|
+
spec.add_development_dependency 'rails', '~>5.0.0'
|
35
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
36
|
+
spec.add_development_dependency 'react-rails', '< 1.10.0'
|
29
37
|
|
30
|
-
#
|
31
|
-
spec.add_development_dependency '
|
32
|
-
spec.add_development_dependency 'react-rails', '~> 1.4.0'
|
33
|
-
spec.add_development_dependency 'opal-rails'
|
34
|
-
# spec.add_development_dependency 'opal-activesupport'
|
35
|
-
# spec.add_development_dependency 'factory_girl_rails'
|
36
|
-
# spec.add_development_dependency 'reactrb-rails-generator'
|
37
|
-
# spec.add_development_dependency 'rspec-wait'
|
38
|
-
spec.add_development_dependency 'puma'
|
38
|
+
# Keep linter-rubocop happy
|
39
|
+
spec.add_development_dependency 'rubocop'
|
39
40
|
|
40
41
|
if RUBY_PLATFORM == 'java'
|
41
42
|
spec.add_development_dependency 'therubyrhino'
|
42
43
|
else
|
43
44
|
spec.add_development_dependency 'therubyracer', '0.12.2'
|
44
45
|
|
45
|
-
#
|
46
|
-
spec.
|
47
|
-
spec.
|
46
|
+
# Actual dependencies
|
47
|
+
spec.add_dependency 'capybara'
|
48
|
+
spec.add_dependency 'opal'
|
49
|
+
spec.add_dependency 'parser'
|
50
|
+
spec.add_dependency 'poltergeist'
|
51
|
+
spec.add_dependency 'pry'
|
52
|
+
spec.add_dependency 'rspec-rails'
|
53
|
+
spec.add_dependency 'selenium-webdriver', '2.53.4'
|
54
|
+
spec.add_dependency 'timecop'
|
55
|
+
spec.add_dependency 'unparser', '0.2.5'
|
48
56
|
|
49
|
-
#
|
50
|
-
spec.add_development_dependency 'shoulda'
|
51
|
-
spec.add_development_dependency 'shoulda-matchers'
|
52
|
-
spec.add_development_dependency 'rspec-its'
|
53
|
-
spec.add_development_dependency 'rspec-collection_matchers'
|
54
|
-
spec.add_development_dependency 'capybara'
|
55
|
-
spec.add_development_dependency 'selenium-webdriver', '2.53.4'
|
56
|
-
spec.add_development_dependency 'poltergeist'
|
57
|
-
spec.add_development_dependency 'spring-commands-rspec'
|
57
|
+
# Test app dependencies
|
58
58
|
spec.add_development_dependency 'chromedriver-helper'
|
59
|
-
spec.add_development_dependency 'parser'
|
60
|
-
spec.add_development_dependency 'unparser', '0.2.5'
|
61
|
-
spec.add_development_dependency 'pry'
|
62
59
|
spec.add_development_dependency 'method_source'
|
63
60
|
spec.add_development_dependency 'opal-browser'
|
61
|
+
spec.add_development_dependency 'opal-rails'
|
62
|
+
spec.add_development_dependency 'puma'
|
63
|
+
spec.add_development_dependency 'rspec-collection_matchers'
|
64
|
+
spec.add_development_dependency 'rspec-expectations'
|
65
|
+
spec.add_development_dependency 'rspec-its'
|
66
|
+
spec.add_development_dependency 'rspec-mocks'
|
64
67
|
spec.add_development_dependency 'rspec-steps'
|
65
|
-
spec.
|
66
|
-
spec.add_development_dependency '
|
68
|
+
spec.add_development_dependency 'shoulda'
|
69
|
+
spec.add_development_dependency 'shoulda-matchers'
|
70
|
+
spec.add_development_dependency 'spring-commands-rspec'
|
67
71
|
end
|
68
72
|
end
|
data/lib/hyper-spec.rb
CHANGED
@@ -1,286 +1,88 @@
|
|
1
|
-
require "hyper-spec/version"
|
2
|
-
require "hyper-spec/engine"
|
3
|
-
|
4
|
-
require 'opal'
|
5
|
-
|
6
|
-
require 'hyper-spec/component_helpers'
|
7
|
-
|
8
|
-
# DELETE require 'pry'
|
9
|
-
# DELETE begin
|
10
|
-
# DELETE require File.expand_path('../test_app/config/environment', __FILE__)
|
11
|
-
# DELETE rescue LoadError
|
12
|
-
# DELETE puts 'Could not load test application. Please ensure you have run `bundle exec rake test_app`'
|
13
|
-
# DELETE end
|
14
|
-
# DELETE require 'rspec/rails'
|
15
|
-
# DELETE require 'timecop'
|
16
|
-
# DELETE require "rspec/wait"
|
17
|
-
# DELETE #require 'pusher-fake/support/base'
|
18
|
-
|
19
|
-
# DELETE Dir["./spec/support/**/*.rb"].sort.each { |f| require f }
|
20
|
-
|
21
|
-
RSpec.configure do |config|
|
22
|
-
# DELETE config.color = true
|
23
|
-
# DELETE config.fail_fast = ENV['FAIL_FAST'] || false
|
24
|
-
# DELETE config.fixture_path = File.join(File.expand_path(File.dirname(__FILE__)), "fixtures")
|
25
|
-
# DELETE config.infer_spec_type_from_file_location!
|
26
|
-
config.mock_with :rspec
|
27
|
-
# DELETE config.raise_errors_for_deprecations!
|
28
|
-
|
29
|
-
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
30
|
-
# examples within a transaction, comment the following line or assign false
|
31
|
-
# instead of true.
|
32
|
-
# DELETE config.use_transactional_fixtures = true
|
33
|
-
|
34
|
-
# config.after :each do
|
35
|
-
# Rails.cache.clear
|
36
|
-
# end
|
37
|
-
|
38
|
-
config.after(:each) do |example|
|
39
|
-
unless example.exception
|
40
|
-
# DELETE #Object.send(:remove_const, :Application) rescue nil
|
41
|
-
# DELETE ObjectSpace.each_object(Class).each do |klass|
|
42
|
-
# DELETE if klass < HyperMesh::Regulation
|
43
|
-
# DELETE klass.instance_variables.each { |v| klass.instance_variable_set(v, nil) }
|
44
|
-
# DELETE end
|
45
|
-
# DELETE end
|
46
|
-
PusherFake::Channel.reset if defined? PusherFake
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# DELETE config.filter_run_including focus: true
|
51
|
-
# DELETE config.filter_run_excluding opal: true
|
52
|
-
# DELETE config.run_all_when_everything_filtered = true
|
53
|
-
end
|
54
|
-
|
55
|
-
# DELETE FACTORY_GIRL = false
|
56
|
-
|
57
|
-
# DELETE #require 'rails_helper'
|
58
|
-
# DELETE require 'rspec'
|
59
|
-
# DELETE require 'rspec/expectations'
|
60
|
-
# DELETE begin
|
61
|
-
# DELETE require 'factory_girl_rails'
|
62
|
-
# DELETE rescue LoadError
|
63
|
-
# DELETE end
|
64
|
-
# DELETE require 'shoulda/matchers'
|
65
|
-
# DELETE require 'database_cleaner'
|
66
1
|
require 'capybara/rspec'
|
67
|
-
#hmmm.... where should this go???? require 'capybara/rails'
|
68
2
|
require 'capybara/poltergeist'
|
3
|
+
require 'opal'
|
69
4
|
require 'selenium-webdriver'
|
70
5
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
# DELETE #Capybara.default_max_wait_time = 4.seconds
|
80
|
-
|
81
|
-
Capybara.server = :puma
|
82
|
-
|
83
|
-
module WaitForAjax
|
84
|
-
|
85
|
-
def wait_for_ajax
|
86
|
-
Timeout.timeout(Capybara.default_max_wait_time) do
|
87
|
-
begin
|
88
|
-
sleep 0.25
|
89
|
-
end until finished_all_ajax_requests?
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def running?
|
94
|
-
result = page.evaluate_script("(function(active) {console.log('jquery is active? '+active); return active})(jQuery.active)")
|
95
|
-
result && !result.zero?
|
96
|
-
rescue Exception => e
|
97
|
-
puts "wait_for_ajax failed while testing state of jQuery.active: #{e}"
|
98
|
-
end
|
99
|
-
|
100
|
-
def finished_all_ajax_requests?
|
101
|
-
unless running?
|
102
|
-
sleep 0.25 # this was 1 second, not sure if its necessary to be so long...
|
103
|
-
!running?
|
104
|
-
end
|
105
|
-
rescue Capybara::NotSupportedByDriverError
|
106
|
-
true
|
107
|
-
rescue Exception => e
|
108
|
-
e.message == "jQuery is not defined"
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
|
113
|
-
RSpec.configure do |config|
|
114
|
-
config.include WaitForAjax
|
115
|
-
end
|
6
|
+
require 'hyper-spec/component_test_helpers'
|
7
|
+
require 'hyper-spec/rails/engine'
|
8
|
+
require 'hyper-spec/version'
|
9
|
+
require 'hyper-spec/wait_for_ajax'
|
10
|
+
require 'react/isomorphic_helpers'
|
11
|
+
require 'selenium/web_driver/firefox/profile'
|
116
12
|
|
117
13
|
RSpec.configure do |config|
|
14
|
+
config.include HyperSpec::ComponentTestHelpers
|
15
|
+
config.include HyperSpec::WaitForAjax
|
16
|
+
config.include Capybara::DSL
|
118
17
|
|
119
|
-
|
18
|
+
config.mock_with :rspec
|
120
19
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
20
|
+
if defined?(HyperMesh)
|
21
|
+
config.before(:each) do
|
22
|
+
HyperMesh.class_eval do
|
23
|
+
def self.on_server?
|
24
|
+
true
|
25
|
+
end
|
125
26
|
end
|
126
27
|
end
|
127
|
-
end
|
28
|
+
end
|
128
29
|
|
129
|
-
config.before(:each, :
|
30
|
+
config.before(:each, js: true) do
|
130
31
|
size_window
|
131
32
|
end
|
132
33
|
|
133
|
-
config.after(:each, :
|
134
|
-
page.instance_variable_set(
|
34
|
+
config.after(:each, js: true) do
|
35
|
+
page.instance_variable_set('@hyper_spec_mounted', false)
|
135
36
|
end
|
136
37
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
# assertion/expectation library such as wrong or the stdlib/minitest
|
141
|
-
# assertions if you prefer.
|
142
|
-
config.expect_with :rspec do |expectations|
|
143
|
-
# Enable only the newer, non-monkey-patching expect syntax.
|
144
|
-
# For more details, see:
|
145
|
-
# - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
|
146
|
-
expectations.syntax = [:should, :expect]
|
147
|
-
end
|
148
|
-
|
149
|
-
# rspec-mocks config goes here. You can use an alternate test double
|
150
|
-
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
151
|
-
config.mock_with :rspec do |mocks|
|
152
|
-
# Enable only the newer, non-monkey-patching expect syntax.
|
153
|
-
# For more details, see:
|
154
|
-
# - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
155
|
-
mocks.syntax = :expect
|
156
|
-
|
157
|
-
# Prevents you from mocking or stubbing a method that does not exist on
|
158
|
-
# a real object. This is generally recommended.
|
159
|
-
mocks.verify_partial_doubles = true
|
160
|
-
end
|
161
|
-
|
162
|
-
config.include FactoryGirl::Syntax::Methods if defined? FactoryGirl
|
163
|
-
|
164
|
-
config.use_transactional_fixtures = false
|
165
|
-
|
166
|
-
config.before(:suite) do
|
167
|
-
DatabaseCleaner.clean_with(:truncation)
|
168
|
-
end
|
169
|
-
|
170
|
-
config.before(:each) do
|
171
|
-
DatabaseCleaner.strategy = :transaction
|
172
|
-
end
|
173
|
-
|
174
|
-
config.before(:each, :js => true) do
|
175
|
-
DatabaseCleaner.strategy = :truncation
|
176
|
-
end
|
177
|
-
|
178
|
-
config.before(:each) do
|
179
|
-
DatabaseCleaner.start
|
180
|
-
end
|
181
|
-
|
182
|
-
config.after(:each) do |example|
|
183
|
-
unless example.exception
|
184
|
-
# Clear session data
|
185
|
-
Capybara.reset_sessions!
|
186
|
-
# Rollback transaction
|
187
|
-
DatabaseCleaner.clean
|
188
|
-
end
|
38
|
+
config.after(:each) do |example|
|
39
|
+
unless example.exception
|
40
|
+
PusherFake::Channel.reset if defined? PusherFake
|
189
41
|
end
|
190
42
|
end
|
43
|
+
end
|
191
44
|
|
45
|
+
# Capybara config
|
46
|
+
RSpec.configure do |_config|
|
47
|
+
Capybara.default_max_wait_time = 10
|
192
48
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
49
|
+
# # In case Google ever fixes chromedriver to work with Opal...
|
50
|
+
# Capybara.register_driver :chrome do |app|
|
51
|
+
# caps = Selenium::WebDriver::Remote::Capabilities.chrome(
|
52
|
+
# 'chromeOptions' => { 'args' => ['--window-size=200,200'] }
|
53
|
+
# )
|
54
|
+
#
|
55
|
+
# Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: caps)
|
56
|
+
# end
|
200
57
|
|
201
|
-
options = {
|
202
|
-
js_errors: false,
|
203
|
-
timeout: 180,
|
204
|
-
inspector: true,
|
205
|
-
phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes']
|
206
|
-
}
|
207
|
-
options.merge!({phantomjs_logger: StringIO.new, logger: StringIO.new,}) unless ENV['SHOW_LOGS']
|
208
58
|
Capybara.register_driver :poltergeist do |app|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
end
|
217
|
-
|
218
|
-
def self.firebug_version=(version)
|
219
|
-
@firebug_version = version
|
220
|
-
end
|
221
|
-
|
222
|
-
def frame_position
|
223
|
-
@frame_position ||= 'detached'
|
224
|
-
end
|
225
|
-
|
226
|
-
def frame_position=(position)
|
227
|
-
@frame_position = ["left", "right", "top", "detached"].detect do |side|
|
228
|
-
position && position[0].downcase == side[0]
|
229
|
-
end || "detached"
|
230
|
-
end
|
231
|
-
|
232
|
-
def enable_firebug(version = nil)
|
233
|
-
version ||= Selenium::WebDriver::Firefox::Profile.firebug_version
|
234
|
-
add_extension(File.expand_path("../bin/firebug-#{version}.xpi", __FILE__))
|
235
|
-
|
236
|
-
# For some reason, Firebug seems to trigger the Firefox plugin check
|
237
|
-
# (navigating to https://www.mozilla.org/en-US/plugincheck/ at startup).
|
238
|
-
# This prevents it. See http://code.google.com/p/selenium/issues/detail?id=4619.
|
239
|
-
self["extensions.blocklist.enabled"] = false
|
240
|
-
|
241
|
-
# Prevent "Welcome!" tab
|
242
|
-
self["extensions.firebug.showFirstRunPage"] = false
|
243
|
-
|
244
|
-
# Enable for all sites.
|
245
|
-
self["extensions.firebug.allPagesActivation"] = "on"
|
246
|
-
|
247
|
-
# Enable all features.
|
248
|
-
['console', 'net', 'script'].each do |feature|
|
249
|
-
self["extensions.firebug.#{feature}.enableSites"] = true
|
59
|
+
options = {
|
60
|
+
js_errors: false, timeout: 180, inspector: true,
|
61
|
+
phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes']
|
62
|
+
}.tap do |hash|
|
63
|
+
unless ENV['SHOW_LOGS']
|
64
|
+
hash[:phantomjs_logger] = StringIO.new
|
65
|
+
hash[:logger] = StringIO.new
|
250
66
|
end
|
251
|
-
|
252
|
-
# Closed by default, will open detached.
|
253
|
-
self["extensions.firebug.framePosition"] = frame_position
|
254
|
-
self["extensions.firebug.previousPlacement"] = 3
|
255
|
-
self["extensions.firebug.defaultPanelName"] = "console"
|
256
|
-
|
257
|
-
# Disable native "Inspect Element" menu item.
|
258
|
-
self["devtools.inspector.enabled"] = false
|
259
|
-
self["extensions.firebug.hideDefaultInspector"] = true
|
260
67
|
end
|
68
|
+
|
69
|
+
Capybara::Poltergeist::Driver.new(app, options)
|
261
70
|
end
|
262
71
|
|
263
72
|
Capybara.register_driver :selenium_with_firebug do |app|
|
264
73
|
profile = Selenium::WebDriver::Firefox::Profile.new
|
265
74
|
profile.frame_position = ENV['DRIVER'] && ENV['DRIVER'][2]
|
266
75
|
profile.enable_firebug
|
267
|
-
Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
|
268
|
-
end
|
269
|
-
|
270
|
-
Capybara.javascript_driver = :poltergeist
|
271
|
-
|
272
|
-
Capybara.register_driver :chrome do |app|
|
273
|
-
Capybara::Selenium::Driver.new(app, :browser => :chrome)
|
274
|
-
end
|
275
76
|
|
276
|
-
|
277
|
-
Capybara.javascript_driver = :selenium_with_firebug
|
278
|
-
elsif ENV['DRIVER'] == 'chrome'
|
279
|
-
Capybara.javascript_driver = :chrome
|
280
|
-
else
|
281
|
-
Capybara.javascript_driver = :poltergeist
|
77
|
+
Capybara::Selenium::Driver.new(app, browser: :firefox, profile: profile)
|
282
78
|
end
|
283
79
|
|
284
|
-
|
285
|
-
|
80
|
+
Capybara.javascript_driver =
|
81
|
+
if ENV['DRIVER'] =~ /^ff/
|
82
|
+
:selenium_with_firebug
|
83
|
+
# elsif ENV['DRIVER'] == 'chrome'
|
84
|
+
# Capybara.javascript_driver = :chrome
|
85
|
+
else
|
86
|
+
:poltergeist
|
87
|
+
end
|
286
88
|
end
|