hyper-spec 0.1.0 → 0.1.1
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 +2 -7
- data/Gemfile.lock +16 -27
- data/README.md +0 -5
- data/hyper-spec.gemspec +45 -49
- data/lib/hyper-spec.rb +252 -54
- data/lib/hyper-spec/component_helpers.rb +368 -0
- data/lib/hyper-spec/{rails/engine.rb → engine.rb} +0 -1
- data/lib/hyper-spec/time_cop.rb +99 -30
- data/lib/hyper-spec/version.rb +1 -1
- data/play.rb +0 -0
- data/vendor/assets/javascripts/time_cop.rb +10 -7
- metadata +77 -98
- data/.rubocop.yml +0 -107
- data/lib/hyper-spec/component_test_helpers.rb +0 -306
- data/lib/hyper-spec/lolex.rb +0 -66
- data/lib/hyper-spec/wait_for_ajax.rb +0 -30
- data/lib/react/isomorphic_helpers.rb +0 -7
- data/lib/react/top_level_rails_component.rb +0 -104
- data/lib/selenium/web_driver/firefox/profile.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2934f3c0c220b8178be5364c372de4474fba2b74
|
4
|
+
data.tar.gz: add452cd5e700a0540b8c97253176f55ff9eecfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0793765d331c7070e355331de5528ed2333d98a48900569877a4a10c7e198a214ff5150db6eddf9ec6d4956b41f39b268a43573669f4e3500615abee86a9253e
|
7
|
+
data.tar.gz: 528748ad43262c8bb341306c3308be71054f81f152d96bb6cec3ef17059dcc86796b518a6e46b13b7ec08e5594a9dba22ca8e8e0cadd085131f4034ba3b65626
|
data/.gitignore
CHANGED
@@ -8,6 +8,8 @@ capybara-*.html
|
|
8
8
|
/public/system
|
9
9
|
/coverage/
|
10
10
|
/spec/tmp
|
11
|
+
/spec/test_app/log
|
12
|
+
/spec/test_app/tmp
|
11
13
|
**.orig
|
12
14
|
rerun.txt
|
13
15
|
pickle-email-*.html
|
@@ -40,10 +42,3 @@ bower.json
|
|
40
42
|
|
41
43
|
# Ignore Byebug command history file.
|
42
44
|
.byebug_history
|
43
|
-
|
44
|
-
# Ignore test app files
|
45
|
-
/spec/test_app/log/
|
46
|
-
/spec/test_app/tmp/
|
47
|
-
|
48
|
-
# Ignore built gem
|
49
|
-
*.gem
|
data/Gemfile.lock
CHANGED
@@ -2,15 +2,8 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
hyper-spec (0.1.0)
|
5
|
-
|
6
|
-
|
7
|
-
parser
|
8
|
-
poltergeist
|
9
|
-
pry
|
10
|
-
rspec-rails
|
11
|
-
selenium-webdriver (= 2.53.4)
|
12
|
-
timecop
|
13
|
-
unparser (= 0.2.5)
|
5
|
+
hyper-react (>= 0.10.0)
|
6
|
+
rails
|
14
7
|
|
15
8
|
GEM
|
16
9
|
remote: https://rubygems.org/
|
@@ -67,7 +60,7 @@ GEM
|
|
67
60
|
babel-source (>= 4.0, < 6)
|
68
61
|
execjs (~> 2.0)
|
69
62
|
builder (3.2.3)
|
70
|
-
capybara (2.
|
63
|
+
capybara (2.10.1)
|
71
64
|
addressable
|
72
65
|
mime-types (>= 1.16)
|
73
66
|
nokogiri (>= 1.3.3)
|
@@ -149,18 +142,17 @@ GEM
|
|
149
142
|
paggio (0.2.6)
|
150
143
|
parser (2.3.3.1)
|
151
144
|
ast (~> 2.2)
|
152
|
-
poltergeist (1.
|
145
|
+
poltergeist (1.11.0)
|
153
146
|
capybara (~> 2.1)
|
154
147
|
cliver (~> 0.3.1)
|
155
148
|
websocket-driver (>= 0.2.0)
|
156
|
-
powerpack (0.1.1)
|
157
149
|
procto (0.0.3)
|
158
150
|
pry (0.10.4)
|
159
151
|
coderay (~> 1.1.0)
|
160
152
|
method_source (~> 0.8.1)
|
161
153
|
slop (~> 3.4)
|
162
154
|
public_suffix (2.0.5)
|
163
|
-
puma (3.
|
155
|
+
puma (3.6.2)
|
164
156
|
rack (2.0.1)
|
165
157
|
rack-test (0.6.3)
|
166
158
|
rack (>= 1.0)
|
@@ -187,7 +179,6 @@ GEM
|
|
187
179
|
method_source
|
188
180
|
rake (>= 0.8.7)
|
189
181
|
thor (>= 0.18.1, < 2.0)
|
190
|
-
rainbow (2.2.1)
|
191
182
|
rake (10.5.0)
|
192
183
|
react-rails (1.4.2)
|
193
184
|
babel-transpiler (>= 0.7.0)
|
@@ -201,7 +192,7 @@ GEM
|
|
201
192
|
rspec-core (~> 3.5.0)
|
202
193
|
rspec-expectations (~> 3.5.0)
|
203
194
|
rspec-mocks (~> 3.5.0)
|
204
|
-
rspec-collection_matchers (1.1.
|
195
|
+
rspec-collection_matchers (1.1.2)
|
205
196
|
rspec-expectations (>= 2.99.0.beta1)
|
206
197
|
rspec-core (3.5.4)
|
207
198
|
rspec-support (~> 3.5.0)
|
@@ -225,13 +216,6 @@ GEM
|
|
225
216
|
rspec-steps (2.1.1)
|
226
217
|
rspec (>= 3.0, < 3.99)
|
227
218
|
rspec-support (3.5.0)
|
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
219
|
rubyzip (1.2.0)
|
236
220
|
selenium-webdriver (2.53.4)
|
237
221
|
childprocess (~> 0.5)
|
@@ -240,7 +224,7 @@ GEM
|
|
240
224
|
shoulda (3.5.0)
|
241
225
|
shoulda-context (~> 1.0, >= 1.0.1)
|
242
226
|
shoulda-matchers (>= 1.4.1, < 3.0)
|
243
|
-
shoulda-context (1.2.
|
227
|
+
shoulda-context (1.2.1)
|
244
228
|
shoulda-matchers (2.8.0)
|
245
229
|
activesupport (>= 3.0.0)
|
246
230
|
slop (3.6.0)
|
@@ -265,7 +249,6 @@ GEM
|
|
265
249
|
timecop (0.8.1)
|
266
250
|
tzinfo (1.2.2)
|
267
251
|
thread_safe (~> 0.1)
|
268
|
-
unicode-display_width (1.1.3)
|
269
252
|
unparser (0.2.5)
|
270
253
|
abstract_type (~> 0.0.7)
|
271
254
|
adamantium (~> 0.2.0)
|
@@ -286,26 +269,32 @@ PLATFORMS
|
|
286
269
|
|
287
270
|
DEPENDENCIES
|
288
271
|
bundler (~> 1.12)
|
272
|
+
capybara
|
289
273
|
chromedriver-helper
|
290
|
-
hyper-react (>= 0.10.0)
|
291
274
|
hyper-spec!
|
292
275
|
method_source
|
293
276
|
opal-browser
|
294
277
|
opal-rails
|
278
|
+
parser
|
279
|
+
poltergeist
|
280
|
+
pry
|
295
281
|
puma
|
296
282
|
rails (~> 5.0.0)
|
297
283
|
rake (~> 10.0)
|
298
|
-
react-rails (
|
284
|
+
react-rails (~> 1.4.0)
|
299
285
|
rspec-collection_matchers
|
300
286
|
rspec-expectations
|
301
287
|
rspec-its
|
302
288
|
rspec-mocks
|
289
|
+
rspec-rails
|
303
290
|
rspec-steps
|
304
|
-
|
291
|
+
selenium-webdriver (= 2.53.4)
|
305
292
|
shoulda
|
306
293
|
shoulda-matchers
|
307
294
|
spring-commands-rspec
|
308
295
|
therubyracer (= 0.12.2)
|
296
|
+
timecop
|
297
|
+
unparser (= 0.2.5)
|
309
298
|
|
310
299
|
BUNDLED WITH
|
311
300
|
1.12.5
|
data/README.md
CHANGED
@@ -350,11 +350,6 @@ 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
|
-
|
358
353
|
## Development
|
359
354
|
|
360
355
|
After checking out the repo, run bundle install and you should be good to go.
|
data/hyper-spec.gemspec
CHANGED
@@ -1,72 +1,68 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib
|
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|
|
7
|
+
spec.name = "hyper-spec"
|
8
8
|
spec.version = HyperSpec::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ["catmando"]
|
10
|
+
spec.email = ["mitch@catprint.com"]
|
11
11
|
|
12
|
-
spec.summary =
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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'
|
12
|
+
spec.summary = "Drive your Hyperloop client and server specs from RSpec and Capybara"
|
13
|
+
spec.description = "A Hyperloop application consists of isomorphic React Components, Active Record Models, Stores, Operations and Policiespec. "\
|
14
|
+
"Test them all from Rspec, regardless if the code runs on the client or server."
|
15
|
+
spec.homepage = "https://github.com/ruby-hyperloop/hyper-spec"
|
16
|
+
spec.license = "MIT"
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
24
|
-
|
25
|
-
spec.files =
|
26
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
|
-
spec.bindir = 'exe'
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.bindir = "exe"
|
28
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
|
-
spec.require_paths = [
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.12"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
|
26
|
+
spec.add_dependency 'hyper-react', '>= 0.10.0'
|
30
27
|
|
31
|
-
|
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'
|
28
|
+
spec.add_development_dependency 'rspec-rails'
|
37
29
|
|
38
|
-
#
|
39
|
-
spec.add_development_dependency '
|
30
|
+
# For Test Rails App
|
31
|
+
spec.add_development_dependency 'rails', '~>5.0.0' #'4.2.4'
|
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'
|
40
39
|
|
41
40
|
if RUBY_PLATFORM == 'java'
|
42
41
|
spec.add_development_dependency 'therubyrhino'
|
43
42
|
else
|
44
43
|
spec.add_development_dependency 'therubyracer', '0.12.2'
|
45
44
|
|
46
|
-
#
|
47
|
-
spec.
|
48
|
-
spec.
|
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'
|
45
|
+
# The following allow react code to be tested from the server side
|
46
|
+
spec.add_development_dependency 'rspec-mocks'
|
47
|
+
spec.add_development_dependency 'rspec-expectations'
|
56
48
|
|
57
|
-
#
|
49
|
+
# spec.add_development_dependency 'factory_girl_rails'
|
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'
|
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'
|
59
62
|
spec.add_development_dependency 'method_source'
|
60
63
|
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'
|
67
64
|
spec.add_development_dependency 'rspec-steps'
|
68
|
-
spec.
|
69
|
-
spec.add_development_dependency '
|
70
|
-
spec.add_development_dependency 'spring-commands-rspec'
|
65
|
+
spec.add_dependency "rails"
|
66
|
+
spec.add_development_dependency 'timecop'
|
71
67
|
end
|
72
68
|
end
|
data/lib/hyper-spec.rb
CHANGED
@@ -1,88 +1,286 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "hyper-spec/version"
|
2
|
+
require "hyper-spec/engine"
|
3
|
+
|
3
4
|
require 'opal'
|
4
|
-
require 'selenium-webdriver'
|
5
5
|
|
6
|
-
require 'hyper-spec/
|
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'
|
6
|
+
require 'hyper-spec/component_helpers'
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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 }
|
17
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!
|
18
26
|
config.mock_with :rspec
|
27
|
+
# DELETE config.raise_errors_for_deprecations!
|
19
28
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
27
47
|
end
|
28
48
|
end
|
29
49
|
|
30
|
-
config.
|
31
|
-
|
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
|
+
require 'capybara/rspec'
|
67
|
+
#hmmm.... where should this go???? require 'capybara/rails'
|
68
|
+
require 'capybara/poltergeist'
|
69
|
+
require 'selenium-webdriver'
|
70
|
+
|
71
|
+
module React
|
72
|
+
module IsomorphicHelpers
|
73
|
+
def self.load_context(ctx, controller, name = nil)
|
74
|
+
@context = Context.new("#{controller.object_id}-#{Time.now.to_i}", ctx, controller, name)
|
75
|
+
end
|
32
76
|
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# DELETE #Capybara.default_max_wait_time = 4.seconds
|
80
|
+
|
81
|
+
Capybara.server = :puma
|
82
|
+
|
83
|
+
module WaitForAjax
|
33
84
|
|
34
|
-
|
35
|
-
|
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
|
36
91
|
end
|
37
92
|
|
38
|
-
|
39
|
-
|
40
|
-
|
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?
|
41
104
|
end
|
105
|
+
rescue Capybara::NotSupportedByDriverError
|
106
|
+
true
|
107
|
+
rescue Exception => e
|
108
|
+
e.message == "jQuery is not defined"
|
42
109
|
end
|
110
|
+
|
43
111
|
end
|
44
112
|
|
45
|
-
|
46
|
-
|
113
|
+
RSpec.configure do |config|
|
114
|
+
config.include WaitForAjax
|
115
|
+
end
|
116
|
+
|
117
|
+
RSpec.configure do |config|
|
118
|
+
|
47
119
|
Capybara.default_max_wait_time = 10
|
48
120
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
# end
|
121
|
+
config.before(:each) do |x|
|
122
|
+
HyperMesh.class_eval do
|
123
|
+
def self.on_server?
|
124
|
+
true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end if defined? HyperMesh
|
57
128
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
129
|
+
config.before(:each, :js => true) do
|
130
|
+
size_window
|
131
|
+
end
|
132
|
+
|
133
|
+
config.after(:each, :js => true) do
|
134
|
+
page.instance_variable_set("@hyper_spec_mounted", false)
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
if false # delete? THIS BLOCK ????
|
139
|
+
# rspec-expectations config goes here. You can use an alternate
|
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
|
66
188
|
end
|
67
189
|
end
|
190
|
+
end
|
68
191
|
|
192
|
+
|
193
|
+
config.include Capybara::DSL
|
194
|
+
|
195
|
+
Capybara.register_driver :chrome do |app|
|
196
|
+
#caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"excludeSwitches" => [ "ignore-certificate-errors" ]})
|
197
|
+
caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"args" => [ "--window-size=200,200" ]})
|
198
|
+
Capybara::Selenium::Driver.new(app, :browser => :chrome, :desired_capabilities => caps)
|
199
|
+
end
|
200
|
+
|
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
|
+
Capybara.register_driver :poltergeist do |app|
|
69
209
|
Capybara::Poltergeist::Driver.new(app, options)
|
70
210
|
end
|
71
211
|
|
212
|
+
class Selenium::WebDriver::Firefox::Profile
|
213
|
+
|
214
|
+
def self.firebug_version
|
215
|
+
@firebug_version ||= '2.0.13-fx'
|
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
|
250
|
+
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
|
+
end
|
261
|
+
end
|
262
|
+
|
72
263
|
Capybara.register_driver :selenium_with_firebug do |app|
|
73
264
|
profile = Selenium::WebDriver::Firefox::Profile.new
|
74
265
|
profile.frame_position = ENV['DRIVER'] && ENV['DRIVER'][2]
|
75
266
|
profile.enable_firebug
|
267
|
+
Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
|
268
|
+
end
|
269
|
+
|
270
|
+
Capybara.javascript_driver = :poltergeist
|
76
271
|
|
77
|
-
|
272
|
+
Capybara.register_driver :chrome do |app|
|
273
|
+
Capybara::Selenium::Driver.new(app, :browser => :chrome)
|
78
274
|
end
|
79
275
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
276
|
+
if ENV['DRIVER'] =~ /^ff/
|
277
|
+
Capybara.javascript_driver = :selenium_with_firebug
|
278
|
+
elsif ENV['DRIVER'] == 'chrome'
|
279
|
+
Capybara.javascript_driver = :chrome
|
280
|
+
else
|
281
|
+
Capybara.javascript_driver = :poltergeist
|
282
|
+
end
|
283
|
+
|
284
|
+
include ComponentTestHelpers
|
285
|
+
|
88
286
|
end
|