jasmine 3.4.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,5 @@
1
1
  require 'phantomjs'
2
+ require 'json'
2
3
 
3
4
  module Jasmine
4
5
  module Runners
@@ -59,7 +59,11 @@ namespace :jasmine do
59
59
  config = Jasmine.config
60
60
  port = config.port(:server)
61
61
  server = Jasmine::Server.new(port, Jasmine::Application.app(Jasmine.config), config.rack_options)
62
- puts "your server is running here: http://localhost:#{port}/"
62
+ if config.random
63
+ puts "your server is running here: http://localhost:#{port}/"
64
+ else
65
+ puts "your server is running here: http://localhost:#{port}/?random=false"
66
+ end
63
67
  puts "your tests are here: #{config.spec_dir}"
64
68
  puts "your source files are here: #{config.src_dir}"
65
69
  puts ''
@@ -1,3 +1,3 @@
1
1
  module Jasmine
2
- VERSION = "3.4.0"
2
+ VERSION = "3.8.0"
3
3
  end
@@ -0,0 +1,16 @@
1
+ # Jasmine Gem 3.5 Release Notes
2
+
3
+ ## Summary
4
+
5
+ This release updates the jasmine-core dependency to 3.5.0. See the
6
+ [jasmine-core release notes](https://github.com/jasmine/jasmine/blob/master/release_notes/3.5.0.md)
7
+ for more information
8
+
9
+ ## Changes
10
+
11
+ * Add docs for how to use the new Chrome Headless runner
12
+ - Fixes [#308](https://github.com/jasmine/jasmine-gem/issues/308)
13
+
14
+ ------
15
+
16
+ _Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_
@@ -0,0 +1,18 @@
1
+ # Jasmine Gem 3.5.1 Release Notes
2
+
3
+ ## Summary
4
+
5
+ This update allows the gem to continue working with Sprockets in Rails 6
6
+
7
+ ## Changes
8
+
9
+ * Various readme improvements
10
+ - Merges [#312](https://github.com/jasmine/jasmine-gem/issues/312) from @cprodhomme
11
+
12
+ * Allow Jasmine to continue to work with Rails 6
13
+ - Merges [#310](https://github.com/jasmine/jasmine-gem/issues/310) from @cbaines
14
+ - Fixes [#311](https://github.com/jasmine/jasmine-gem/issues/311)
15
+
16
+ ------
17
+
18
+ _Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_
@@ -0,0 +1,31 @@
1
+ # Jasmine Gem 3.6 Release Notes
2
+
3
+ ## Summary
4
+
5
+ This release updates the jasmine-core dependency to 3.6.0. See the
6
+ [jasmine-core release notes](https://github.com/jasmine/jasmine/blob/main/release_notes/3.6.0.md)
7
+ for more information
8
+
9
+
10
+ ## Changes
11
+
12
+ * Change jasmine:server url depending on random flag
13
+ * Merges #317 from @vimalloc
14
+ * Fixes #307
15
+
16
+ * Fix Action View deprecation warnings in Rails 6
17
+ * Merges #318 from @pixeltrix
18
+
19
+ * Prevent race condition with Chrome Remote startup
20
+ * Merges #316 from @stoivo
21
+
22
+ * Add API to enable/disable coloring text
23
+ * Merges #313 from @soutaro
24
+
25
+ * Add support for chrome from yaourt
26
+ * Merges #315 from @TheBlackArroVV
27
+ * Fixes #314
28
+
29
+ ------
30
+
31
+ _Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_
@@ -0,0 +1,7 @@
1
+ # Jasmine Gem 3.7 Release Notes
2
+
3
+ ## Summary
4
+
5
+ This release updates the jasmine-core dependency to 3.7.0. See the
6
+ [jasmine-core release notes](https://github.com/jasmine/jasmine/blob/main/release_notes/3.7.0.md)
7
+ for more information
@@ -0,0 +1,38 @@
1
+ # Jasmine Gem 3.8 Release Notes
2
+
3
+ ## Summary
4
+
5
+ This release updates the jasmine-core dependency to 3.8.0. See the
6
+ [jasmine-core release notes](https://github.com/pivotal/jasmine/blob/main/release_notes/3.8.0.md)
7
+ for more information.
8
+
9
+ ## Changes
10
+
11
+ * Ruby 3.0 compatibility
12
+
13
+ # Internal notes
14
+
15
+ * Added Ruby 2.7 and Ruby 3.0 to CI matrix
16
+
17
+ * Migrated from Travis to Circle CI
18
+
19
+ ## Supported Environments
20
+
21
+ The Jasmine gem has been tested in the following environments:
22
+
23
+ | Rails version | Ruby versions |
24
+ |-----------------|---------------|
25
+ | 6 | 2.5-3.0 |
26
+ | 5 | 2.3-2.7 |
27
+ | 4 | 2.3-2.6 |
28
+ | Non-Rails usage | 2.3-3.0 |
29
+
30
+ See the
31
+ [jasmine-core release notes](https://github.com/jasmine/jasmine/blob/main/release_notes/3.8.0.md)
32
+ for supported browsers.
33
+
34
+
35
+
36
+ ------
37
+
38
+ _Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_
@@ -61,6 +61,149 @@ describe Jasmine::CiRunner do
61
61
  expect(runner).to have_received(:run)
62
62
  end
63
63
 
64
+ it 'instantiates all formatters' do
65
+ class SimpleFormatter1
66
+ end
67
+
68
+ class SimpleFormatter2
69
+ end
70
+
71
+ expect(config).to receive(:formatters) { [SimpleFormatter1, SimpleFormatter2] }
72
+
73
+ ci_runner = Jasmine::CiRunner.new(config, thread: fake_thread, application_factory: application_factory, server_factory: server_factory, outputter: outputter)
74
+
75
+ ci_runner.run
76
+
77
+ expect(runner_factory).to have_received(:call).with(anything, anything) do |multi_formatter, url|
78
+ expect_any_instance_of(SimpleFormatter1).to receive(:format)
79
+ expect_any_instance_of(SimpleFormatter2).to receive(:format)
80
+
81
+ multi_formatter.format([])
82
+ end
83
+ end
84
+
85
+ it 'instantiates formatters with arguments' do
86
+ class SimpleFormatter
87
+ attr_reader :obj
88
+ def initialize(obj)
89
+ @obj = obj
90
+ end
91
+ end
92
+
93
+ expect(config).to receive(:formatters) { [SimpleFormatter] }
94
+
95
+ ci_runner = Jasmine::CiRunner.new(config, thread: fake_thread, application_factory: application_factory, server_factory: server_factory, outputter: outputter)
96
+
97
+ ci_runner.run
98
+
99
+ expect(runner_factory).to have_received(:call).with(anything, anything) do |multi_formatter, url|
100
+ expect_any_instance_of(SimpleFormatter).to receive(:format) do |formatter, results|
101
+ expect(formatter.obj).to eq(config)
102
+ end
103
+
104
+ multi_formatter.format([])
105
+ end
106
+ end
107
+
108
+ it 'works with formatters that are not classes' do
109
+ class Factory1
110
+ attr_reader :called
111
+ def new
112
+ @called = true
113
+ nil
114
+ end
115
+ end
116
+
117
+ class Factory2
118
+ attr_reader :called
119
+ attr_reader :obj
120
+ def new(obj)
121
+ @obj = obj
122
+ @called = true
123
+ nil
124
+ end
125
+ end
126
+
127
+ factory1 = Factory1.new
128
+ factory2 = Factory2.new
129
+
130
+ expect(config).to receive(:formatters) { [factory1, factory2] }
131
+
132
+ ci_runner = Jasmine::CiRunner.new(config, thread: fake_thread, application_factory: application_factory, server_factory: server_factory, outputter: outputter)
133
+
134
+ ci_runner.run
135
+
136
+ expect(factory1.called).to eq(true)
137
+ expect(factory2.called).to eq(true)
138
+ expect(factory2.obj).to eq(config)
139
+ end
140
+
141
+ it 'handles optional arguments by only passing config when it is required' do
142
+ class NoConfigFormatter
143
+ attr_reader :optional
144
+ def initialize(optional = {config: 'no'})
145
+ @optional = optional
146
+ end
147
+ end
148
+
149
+ class HasConfigFormatter
150
+ attr_reader :obj, :optional
151
+ def initialize(obj, optional = {config: 'no'})
152
+ @obj = obj
153
+ @optional = optional
154
+ end
155
+ end
156
+
157
+ class NoConfigFactory
158
+ def initialize(dummy_formatter)
159
+ @dummy_formatter = dummy_formatter
160
+ end
161
+ attr_reader :optional
162
+ def new(optional = {config: 'no'})
163
+ @optional = optional
164
+ @dummy_formatter
165
+ end
166
+ end
167
+
168
+ class HasConfigFactory
169
+ def initialize(dummy_formatter)
170
+ @dummy_formatter = dummy_formatter
171
+ end
172
+ attr_reader :obj, :optional
173
+ def new(obj, optional = {config: 'no'})
174
+ @obj = obj
175
+ @optional = optional
176
+ @dummy_formatter
177
+ end
178
+ end
179
+
180
+ no_config_factory = NoConfigFactory.new(double(:formatter, format: nil))
181
+ has_config_factory = HasConfigFactory.new(double(:formatter, format: nil))
182
+
183
+ expect(config).to receive(:formatters) { [NoConfigFormatter, HasConfigFormatter, no_config_factory, has_config_factory] }
184
+
185
+ ci_runner = Jasmine::CiRunner.new(config, thread: fake_thread, application_factory: application_factory, server_factory: server_factory, outputter: outputter)
186
+
187
+ ci_runner.run
188
+
189
+ expect(no_config_factory.optional).to eq({config: 'no'})
190
+ expect(has_config_factory.optional).to eq({config: 'no'})
191
+ expect(has_config_factory.obj).to eq(config)
192
+
193
+ expect(runner_factory).to have_received(:call).with(anything, anything) do |multi_formatter, url|
194
+ expect_any_instance_of(NoConfigFormatter).to receive(:format) do |formatter, results|
195
+ expect(formatter.optional).to eq({config: 'no'})
196
+ end
197
+
198
+ expect_any_instance_of(HasConfigFormatter).to receive(:format) do |formatter, results|
199
+ expect(formatter.optional).to eq({config: 'no'})
200
+ expect(formatter.obj).to eq(config)
201
+ end
202
+
203
+ multi_formatter.format([])
204
+ end
205
+ end
206
+
64
207
  it 'adds runner boot files when necessary' do
65
208
  expect(runner).to receive(:boot_js).at_least(:once) { 'foo/bar/baz.js' }
66
209
  expect(config).to receive(:runner_boot_dir=).with('foo/bar')
@@ -215,5 +215,18 @@ describe Jasmine::Configuration do
215
215
  config.runner.call('hi')
216
216
  end
217
217
  end
218
+
219
+ describe 'colorization settings' do
220
+ it 'defaults to color' do
221
+ config = Jasmine::Configuration.new
222
+ expect(config.color).to eq(true)
223
+ end
224
+
225
+ it 'can be set to false' do
226
+ config = Jasmine::Configuration.new
227
+ config.color = false
228
+ expect(config.color).to eq(false)
229
+ end
230
+ end
218
231
  end
219
232
 
@@ -4,10 +4,19 @@ require 'yaml'
4
4
  require 'jasmine/ruby_versions'
5
5
 
6
6
  if rails_available?
7
+ if !Bundler.respond_to?(:with_unbundled_env)
8
+ module Bundler
9
+ class << self
10
+ alias_method :with_unbundled_env, :with_clean_env
11
+ end
12
+ end
13
+ end
14
+
7
15
  describe 'A Rails app' do
8
16
  def bundle_install
9
- puts `NOKOGIRI_USE_SYSTEM_LIBRARIES=true bundle install --path vendor --retry 3;`
17
+ bundle_output = `NOKOGIRI_USE_SYSTEM_LIBRARIES=true bundle install`
10
18
  unless $?.success?
19
+ puts bundle_output
11
20
  raise "Bundle failed to install."
12
21
  end
13
22
  end
@@ -16,26 +25,35 @@ if rails_available?
16
25
  temp_dir_before
17
26
  Dir::chdir @tmp
18
27
 
19
- `rails new rails-example --skip-bundle --skip-active-record`
28
+ if rails_version == 'rails6'
29
+ `rails new rails-example --skip-bundle --skip-active-record --skip-bootsnap --skip-webpack-install --skip-javascript`
30
+ else
31
+ `rails new rails-example --skip-bundle --skip-active-record`
32
+ end
20
33
  Dir::chdir File.join(@tmp, 'rails-example')
21
34
 
22
35
  base = File.absolute_path(File.join(__FILE__, '../..'))
23
36
 
24
- # execjs v2.2.0 is broken in rbx, locking the version to 2.0.2 for now
25
- # see https://github.com/sstephenson/execjs/issues/148
26
-
27
37
  open('Gemfile', 'a') { |f|
28
38
  f.puts "gem 'jasmine', :path => '#{base}'"
29
- f.puts "gem 'jasmine-core', :git => 'http://github.com/jasmine/jasmine.git'"
30
- if RUBY_PLATFORM != 'java' && ENV['RAILS_VERSION'] != 'rails5'
39
+ f.puts "gem 'jasmine-core', :git => 'http://github.com/jasmine/jasmine.git', ref: 'main'"
40
+ if RUBY_PLATFORM != 'java' && rails_version == 'rails4'
31
41
  f.puts "gem 'thin'"
32
42
  end
33
- f.puts "gem 'angularjs-rails'"
34
- f.puts "gem 'execjs', '2.0.2'"
35
43
  f.flush
36
44
  }
37
45
 
38
- Bundler.with_clean_env do
46
+ FileUtils.mkdir_p('.bundle')
47
+ open('.bundle/config', 'a') do |f|
48
+ f.puts(<<~YAML)
49
+ ---
50
+ BUNDLE_PATH: "vendor"
51
+ BUNDLE_RETRY: "3"
52
+ YAML
53
+ f.flush
54
+ end
55
+
56
+ Bundler.with_unbundled_env do
39
57
  bundle_install
40
58
  `bundle exec rails g jasmine:install`
41
59
  expect($?).to eq 0
@@ -47,6 +65,19 @@ if rails_available?
47
65
  expect(File.exists?('spec/javascripts/jasmine_examples/PlayerSpec.js')).to eq true
48
66
  expect(File.exists?('spec/javascripts/helpers/jasmine_examples/SpecHelper.js')).to eq true
49
67
  end
68
+
69
+ if rails_version == 'rails6'
70
+ FileUtils.mkdir_p('app/assets/javascripts')
71
+ open('app/assets/javascripts/application.js', 'a') { |f|
72
+ f.puts '//= require_tree .'
73
+ f.flush
74
+ }
75
+ FileUtils.mkdir_p('app/assets/config')
76
+ open('app/assets/config/manifest.js', 'a') { |f|
77
+ f.puts '//= link_directory ../javascripts .js'
78
+ f.flush
79
+ }
80
+ end
50
81
  end
51
82
 
52
83
  after :all do
@@ -56,55 +87,23 @@ if rails_available?
56
87
  it 'should have the jasmine & jasmine:ci rake task' do
57
88
  #See https://github.com/jimweirich/rake/issues/220 and https://github.com/jruby/activerecord-jdbc-adapter/pull/467
58
89
  #There's a workaround, but requires setting env vars & jruby opts (non-trivial when inside of a jruby process), so skip for now.
59
- Bundler.with_clean_env do
90
+ Bundler.with_unbundled_env do
60
91
  output = `bundle exec rake -T`
61
92
  expect(output).to include('jasmine ')
62
93
  expect(output).to include('jasmine:ci')
63
94
  end
64
95
  end
65
96
 
66
- describe "with phantomJS" do
67
- it "rake jasmine:ci runs and returns expected results" do
68
- Bundler.with_clean_env do
69
- output = `bundle exec rake jasmine:ci`
70
- expect(output).to include('5 specs, 0 failures')
71
- end
72
- end
73
-
74
- it "rake jasmine:ci returns proper exit code when specs fail" do
75
- Bundler.with_clean_env do
76
- FileUtils.cp(File.join(@root, 'spec', 'fixture', 'failing_test.js'), File.join('spec', 'javascripts'))
77
- failing_yaml = custom_jasmine_config('failing') do |jasmine_config|
78
- jasmine_config['spec_files'] << 'failing_test.js'
79
- end
80
- output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{failing_yaml}`
81
- expect($?).to_not be_success
82
- expect(output).to include('6 specs, 1 failure')
83
- end
84
- end
85
-
86
- it "rake jasmine:ci runs specs when an error occurs in the javascript" do
87
- Bundler.with_clean_env do
88
- FileUtils.cp(File.join(@root, 'spec', 'fixture', 'exception_test.js'), File.join('spec', 'javascripts'))
89
- exception_yaml = custom_jasmine_config('exception') do |jasmine_config|
90
- jasmine_config['spec_files'] << 'exception_test.js'
91
- end
92
- output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{exception_yaml}`
93
- expect($?).to_not be_success
94
- expect(output).to include('5 specs, 0 failures')
95
- end
97
+ context 'with angular mocks' do
98
+ before(:all) do
99
+ open('spec/javascripts/helpers/angular_helper.js', 'w') { |f|
100
+ f.puts "//= require angular-mocks"
101
+ f.flush
102
+ }
96
103
  end
97
104
 
98
- it "runs specs written in coffeescript" do
99
- coffee_yaml = custom_jasmine_config('coffee') do |jasmine_config|
100
- jasmine_config['spec_files'] << 'coffee_spec.coffee'
101
- end
102
- FileUtils.cp(File.join(@root, 'spec', 'fixture', 'coffee_spec.coffee'), File.join('spec', 'javascripts'))
103
-
104
- Bundler.with_clean_env do
105
- output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{coffee_yaml}`
106
- expect(output).to include('6 specs, 0 failures')
107
- end
105
+ after(:all) do
106
+ FileUtils.rm('spec/javascripts/helpers/angular_helper.js')
108
107
  end
109
108
 
110
109
  it "rake jasmine runs and serves the expected webpage when using asset pipeline" do
@@ -113,114 +112,95 @@ if rails_available?
113
112
  f.flush
114
113
  }
115
114
 
116
- open('spec/javascripts/helpers/angular_helper.js', 'w') { |f|
117
- f.puts "//= require angular-mocks"
118
- f.flush
119
- }
120
-
121
115
  css_yaml = custom_jasmine_config('css') do |jasmine_config|
122
116
  jasmine_config['src_files'] = %w[assets/application.js http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js]
123
117
  jasmine_config['stylesheets'] = ['assets/application.css']
124
118
  end
125
119
 
120
+ Bundler.with_unbundled_env do
121
+ `bundle add angularjs-rails`
122
+ end
126
123
  run_jasmine_server("JASMINE_CONFIG_PATH=#{css_yaml}") do
127
124
  output = Net::HTTP.get(URI.parse('http://localhost:8888/'))
128
- expect(output).to match(%r{script src.*/assets/jasmine_examples/Player(\.self-[^\.]+)?\.js})
125
+ if rails_version == 'rails6'
126
+ expect(output).to match(%r{script src.*/(assets/application.debug-[^\.]+\.js)})
127
+ expect(output).to match(%r{<link rel=.stylesheet.*?href=.*/assets/application.debug-[^\.]+\.css})
128
+ else
129
+ expect(output).to match(%r{script src.*/assets/jasmine_examples/Player(\.self-[^\.]+)?\.js})
130
+ expect(output).to match(%r{script src.*/assets/jasmine_examples/Song(\.self-[^\.]+)?\.js})
131
+ expect(output).to match(%r{script src.*angular_helper\.js})
132
+ expect(output).to match(%r{<link rel=.stylesheet.*?href=./assets/foo(\.self-[^\.]+)?\.css\?.*?>})
133
+ end
129
134
  expect(output).to match(%r{script src=['"]http://ajax\.googleapis\.com/ajax/libs/jquery/1\.11\.0/jquery\.min\.js})
130
- expect(output).to match(%r{script src.*/assets/jasmine_examples/Song(\.self-[^\.]+)?\.js})
131
- expect(output).to match(%r{script src.*angular_helper\.js})
132
- expect(output).to match(%r{<link rel=.stylesheet.*?href=./assets/foo(\.self-[^\.]+)?\.css\?.*?>})
133
135
 
134
136
  output = Net::HTTP.get(URI.parse('http://localhost:8888/__spec__/helpers/angular_helper.js'))
135
137
  expect(output).to match(/angular\.mock/)
136
138
  end
137
139
  end
140
+ end
138
141
 
139
- it "sets assets_prefix when using sprockets" do
142
+ context 'with an assets_prefix set' do
143
+ before(:all) do
140
144
  open('app/assets/stylesheets/assets_prefix.js.erb', 'w') { |f|
141
145
  f.puts "<%= assets_prefix %>"
142
146
  f.flush
143
147
  }
148
+ end
144
149
 
150
+ after(:all) do
151
+ FileUtils.rm('app/assets/stylesheets/assets_prefix.js.erb')
152
+ end
153
+
154
+ it "sets assets_prefix when using sprockets" do
145
155
  run_jasmine_server do
146
156
  output = Net::HTTP.get(URI.parse('http://localhost:8888/assets/assets_prefix.js'))
147
157
  expect(output).to match("/assets")
148
158
  end
149
159
  end
160
+ end
150
161
 
151
- it "should load js files outside of the assets path too" do
152
- yaml = custom_jasmine_config('public-assets') do |jasmine_config|
153
- jasmine_config['src_files'] << 'public/javascripts/**/*.js'
154
- jasmine_config['spec_files'] = ['non_asset_pipeline_test.js']
155
- end
156
- FileUtils.mkdir_p(File.join('public', 'javascripts'))
157
- FileUtils.cp(File.join(@root, 'spec', 'fixture', 'non_asset_pipeline.js'), File.join('public', 'javascripts'))
158
- FileUtils.cp(File.join(@root, 'spec', 'fixture', 'non_asset_pipeline_test.js'), File.join('spec', 'javascripts'))
159
-
160
- Bundler.with_clean_env do
161
- output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{yaml}`
162
- expect(output).to include('1 spec, 0 failures')
163
- end
162
+ it "should load js files outside of the assets path too" do
163
+ yaml = custom_jasmine_config('public-assets') do |jasmine_config|
164
+ jasmine_config['src_files'] << 'public/javascripts/**/*.js'
165
+ jasmine_config['spec_files'] = ['non_asset_pipeline_test.js']
164
166
  end
167
+ FileUtils.mkdir_p(File.join('public', 'javascripts'))
168
+ FileUtils.cp(File.join(@root, 'spec', 'fixture', 'non_asset_pipeline.js'), File.join('public', 'javascripts'))
169
+ FileUtils.cp(File.join(@root, 'spec', 'fixture', 'non_asset_pipeline_test.js'), File.join('spec', 'javascripts'))
165
170
 
166
- it "should pass custom rack options from jasmine.yml" do
167
- pending "we're testing this with thin, which doesn't work in jruby" if RUBY_PLATFORM == 'java'
168
- rack_yaml = custom_jasmine_config('custom_rack') do |jasmine_config|
169
- jasmine_config['rack_options'] = { 'server' => 'webrick' }
170
- end
171
-
172
- Bundler.with_clean_env do
173
- default_output = `bundle exec rake jasmine:ci`
174
- if ENV['RAILS_VERSION'] == 'rails5' || ENV['RAILS_VERSION'].nil?
175
- expect(default_output).to include('Puma starting')
176
- else
177
- expect(default_output).to include('Thin web server')
178
- end
179
-
180
- custom_output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{rack_yaml} 2>&1`
181
- expect(custom_output).to include("WEBrick")
182
- end
171
+ Bundler.with_unbundled_env do
172
+ output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{yaml}`
173
+ expect(output).to include('1 spec, 0 failures')
183
174
  end
175
+ end
184
176
 
185
- describe 'using sprockets 4' do
186
- before :all do
187
- FileUtils.cp('Gemfile', 'Gemfile-old')
188
- FileUtils.rm 'Gemfile.lock'
189
-
190
- open('Gemfile', 'a') { |f|
191
- f.puts "gem 'sprockets', '~> 4.0.0.beta6'"
192
- f.flush
193
- }
194
- Bundler.with_clean_env do
195
- bundle_install
196
- end
197
-
198
- FileUtils.mkdir_p('app/assets/config')
177
+ it "should pass custom rack options from jasmine.yml" do
178
+ pending "we're testing this with thin, which doesn't work in jruby" if RUBY_PLATFORM == 'java'
179
+ rack_yaml = custom_jasmine_config('custom_rack') do |jasmine_config|
180
+ jasmine_config['rack_options'] = { 'server' => 'webrick' }
181
+ end
199
182
 
200
- open('app/assets/config/manifest.js', 'w') { |f|
201
- f.puts "//= link application.js"
202
- f.puts "//= link application.css"
203
- f.flush
204
- }
183
+ Bundler.with_unbundled_env do
184
+ default_output = `bundle exec rake jasmine:ci`
185
+ if rails_version == 'rails6' || rails_version == 'rails5' || rails_version.nil?
186
+ expect(default_output).to include('Puma starting')
187
+ else
188
+ expect(default_output).to include('Thin web server')
205
189
  end
206
190
 
207
- after :all do
208
- FileUtils.mv 'Gemfile-old', 'Gemfile'
209
- FileUtils.rm 'Gemfile.lock'
210
- FileUtils.rm 'app/assets/config/manifest.js'
211
- Bundler.with_clean_env do
212
- bundle_install
213
- end
214
- end
191
+ custom_output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{rack_yaml} 2>&1`
192
+ expect(custom_output).to include("WEBrick")
193
+ end
194
+ end
215
195
 
196
+ if rails_version == 'rails6'
197
+ describe 'using sprockets 4' do
216
198
  it "serves source mapped assets" do
217
199
  run_jasmine_server do
218
200
  output = Net::HTTP.get(URI.parse('http://localhost:8888/'))
219
201
 
220
202
  js_match = output.match %r{script src.*/(assets/application.debug-[^\.]+\.js)}
221
-
222
203
  expect(js_match).to_not be_nil
223
- expect(output).to match(%r{<link rel=.stylesheet.*?href=.*/assets/application.debug-[^\.]+\.css})
224
204
 
225
205
  js_path = js_match[1]
226
206
  output = Net::HTTP.get(URI.parse("http://localhost:8888/#{js_path}"))
@@ -230,28 +210,17 @@ if rails_available?
230
210
  end
231
211
  end
232
212
 
233
- describe "with Chrome headless" do
234
- before :all do
235
- open('spec/javascripts/support/jasmine_helper.rb', 'w') { |f|
236
- f.puts "Jasmine.configure do |config|\n config.runner_browser = :chromeheadless\nend\n"
237
- f.flush
238
- }
239
- end
240
-
241
-
242
- it "rake jasmine:ci runs and returns expected results", :focus do
243
- Bundler.with_clean_env do
244
- `bundle add chrome_remote`
213
+ shared_examples_for 'a working jasmine:ci' do
214
+ it "rake jasmine:ci runs and returns expected results" do
215
+ Bundler.with_unbundled_env do
245
216
  output = `bundle exec rake jasmine:ci`
246
217
  expect(output).to include('5 specs, 0 failures')
247
- `bundle remove chrome_remote`
218
+ expect($?).to be_success
248
219
  end
249
220
  end
250
221
 
251
222
  it "rake jasmine:ci returns proper exit code when specs fail" do
252
- Bundler.with_clean_env do
253
- `bundle add chrome_remote`
254
-
223
+ Bundler.with_unbundled_env do
255
224
  FileUtils.cp(File.join(@root, 'spec', 'fixture', 'failing_test.js'), File.join('spec', 'javascripts'))
256
225
  failing_yaml = custom_jasmine_config('failing') do |jasmine_config|
257
226
  jasmine_config['spec_files'] << 'failing_test.js'
@@ -259,13 +228,11 @@ if rails_available?
259
228
  output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{failing_yaml}`
260
229
  expect($?).to_not be_success
261
230
  expect(output).to include('6 specs, 1 failure')
262
- `bundle remove chrome_remote`
263
231
  end
264
232
  end
265
233
 
266
234
  it "rake jasmine:ci runs specs when an error occurs in the javascript" do
267
- Bundler.with_clean_env do
268
- `bundle add chrome_remote`
235
+ Bundler.with_unbundled_env do
269
236
  FileUtils.cp(File.join(@root, 'spec', 'fixture', 'exception_test.js'), File.join('spec', 'javascripts'))
270
237
  exception_yaml = custom_jasmine_config('exception') do |jasmine_config|
271
238
  jasmine_config['spec_files'] << 'exception_test.js'
@@ -273,27 +240,51 @@ if rails_available?
273
240
  output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{exception_yaml}`
274
241
  expect($?).to_not be_success
275
242
  expect(output).to include('5 specs, 0 failures')
276
- `bundle remove chrome_remote`
277
243
  end
278
244
  end
279
245
 
280
- it "runs specs written in coffeescript" do
281
- coffee_yaml = custom_jasmine_config('coffee') do |jasmine_config|
282
- jasmine_config['spec_files'] << 'coffee_spec.coffee'
246
+ unless rails_version == 'rails6'
247
+ it "runs specs written in coffeescript" do
248
+ coffee_yaml = custom_jasmine_config('coffee') do |jasmine_config|
249
+ jasmine_config['spec_files'] << 'coffee_spec.coffee'
250
+ end
251
+ FileUtils.cp(File.join(@root, 'spec', 'fixture', 'coffee_spec.coffee'), File.join('spec', 'javascripts'))
252
+
253
+ Bundler.with_unbundled_env do
254
+ output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{coffee_yaml}`
255
+ expect(output).to include('6 specs, 0 failures')
256
+ expect($?).to be_success
257
+ end
283
258
  end
284
- FileUtils.cp(File.join(@root, 'spec', 'fixture', 'coffee_spec.coffee'), File.join('spec', 'javascripts'))
259
+ end
260
+ end
261
+
262
+ describe "with phantomJS" do
263
+ it_behaves_like 'a working jasmine:ci'
264
+ end
285
265
 
286
- Bundler.with_clean_env do
266
+ describe "with Chrome headless" do
267
+ before :all do
268
+ open('spec/javascripts/support/jasmine_helper.rb', 'w') { |f|
269
+ f.puts "Jasmine.configure do |config|\n config.runner_browser = :chromeheadless\nend\n"
270
+ f.flush
271
+ }
272
+ Bundler.with_unbundled_env do
287
273
  `bundle add chrome_remote`
288
- output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{coffee_yaml}`
289
- expect(output).to include('6 specs, 0 failures')
274
+ end
275
+ end
276
+
277
+ after :all do
278
+ Bundler.with_unbundled_env do
290
279
  `bundle remove chrome_remote`
291
280
  end
292
281
  end
282
+
283
+ it_behaves_like 'a working jasmine:ci'
293
284
  end
294
285
 
295
286
  def run_jasmine_server(options = "")
296
- Bundler.with_clean_env do
287
+ Bundler.with_unbundled_env do
297
288
  begin
298
289
  pid = IO.popen("bundle exec rake jasmine #{options}").pid
299
290
  Jasmine::wait_for_listener(8888, 'localhost', 60)