jasmine 3.3.0 → 3.4.0
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/.travis.yml +8 -2
- data/jasmine.gemspec +1 -1
- data/lib/jasmine.rb +1 -0
- data/lib/jasmine/config.rb +17 -7
- data/lib/jasmine/configuration.rb +8 -0
- data/lib/jasmine/runners/chrome_headless.rb +111 -0
- data/lib/jasmine/runners/chromeheadless_boot.js +15 -0
- data/lib/jasmine/version.rb +1 -1
- data/release_notes/3.4.0.md +17 -0
- data/spec/chrome_headless_spec.rb +50 -0
- data/spec/jasmine_rails_spec.rb +181 -117
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 573d809d765f48020312d811f92cd6bdf06a886d
|
4
|
+
data.tar.gz: da52c0fb175781046c1bbf8c4ff8191f6ce0ca45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3c51f2e936b5e4d7bc5a3eca0f8be430f77867a357c0d6bc20d5d024b1135a4681124f0ebf84b1450ec681836299ecdf9ee2a6d876c7ceb77c0e81e90ab39e7
|
7
|
+
data.tar.gz: bb5a4f560ed5924e97ebb1363facf140968e8173e6224b5b314cd77cca273b223423006fab49035040696faa0fa7309835ce1239f40769decaf52e252f6c6d9b
|
data/.travis.yml
CHANGED
@@ -2,10 +2,14 @@ language: ruby
|
|
2
2
|
sudo: false
|
3
3
|
cache: bundler
|
4
4
|
|
5
|
+
addons:
|
6
|
+
chrome: stable
|
7
|
+
|
5
8
|
rvm:
|
6
9
|
- "2.3"
|
7
10
|
- "2.4"
|
8
11
|
- "2.5"
|
12
|
+
- "2.6"
|
9
13
|
|
10
14
|
env:
|
11
15
|
- "RAILS_VERSION=rails5"
|
@@ -22,5 +26,7 @@ matrix:
|
|
22
26
|
- "RAILS_VERSION=rails5"
|
23
27
|
|
24
28
|
before_install:
|
25
|
-
- gem update --system
|
26
|
-
- gem
|
29
|
+
- "if [$RAILS_VERSION != rails4 ];then gem update --system; fi"
|
30
|
+
- gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
|
31
|
+
- "if [ $RAILS_VERSION = rails4 ];then gem install bundler -v '< 2.0' ; else gem install bundler; fi"
|
32
|
+
- bundle --version
|
data/jasmine.gemspec
CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
s.add_development_dependency 'rspec', '>= 2.5.0'
|
36
36
|
s.add_development_dependency 'nokogiri'
|
37
37
|
|
38
|
-
s.add_dependency 'jasmine-core', '~> 3.
|
38
|
+
s.add_dependency 'jasmine-core', '~> 3.4.0'
|
39
39
|
s.add_dependency 'rack', '>= 1.2.1'
|
40
40
|
s.add_dependency 'rake'
|
41
41
|
s.add_dependency 'phantomjs'
|
data/lib/jasmine.rb
CHANGED
data/lib/jasmine/config.rb
CHANGED
@@ -71,13 +71,23 @@ module Jasmine
|
|
71
71
|
end
|
72
72
|
|
73
73
|
@config.runner = lambda do |formatter, jasmine_server_url|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
74
|
+
case @config.runner_browser
|
75
|
+
when :phantomjs
|
76
|
+
Jasmine::Runners::PhantomJs.new(formatter,
|
77
|
+
jasmine_server_url,
|
78
|
+
@config.prevent_phantom_js_auto_install,
|
79
|
+
@config.show_console_log,
|
80
|
+
@config.phantom_config_script,
|
81
|
+
@config.show_full_stack_trace,
|
82
|
+
@config.phantom_cli_options)
|
83
|
+
when :chromeheadless
|
84
|
+
Jasmine::Runners::ChromeHeadless.new(formatter,
|
85
|
+
jasmine_server_url,
|
86
|
+
@config)
|
87
|
+
else
|
88
|
+
raise "Jasmine.config.runner_browser should be either phantomjs or chromeheadless"
|
89
|
+
end
|
90
|
+
|
81
91
|
end
|
82
92
|
end
|
83
93
|
|
@@ -17,7 +17,11 @@ module Jasmine
|
|
17
17
|
attr_accessor :random
|
18
18
|
attr_accessor :phantom_config_script
|
19
19
|
attr_accessor :phantom_cli_options
|
20
|
+
attr_accessor :chrome_cli_options
|
21
|
+
attr_accessor :chrome_startup_timeout
|
22
|
+
attr_accessor :chrome_binary
|
20
23
|
attr_accessor :show_full_stack_trace
|
24
|
+
attr_accessor :runner_browser
|
21
25
|
attr_reader :rack_apps
|
22
26
|
|
23
27
|
def initialize()
|
@@ -41,6 +45,10 @@ module Jasmine
|
|
41
45
|
@random = true
|
42
46
|
@phantom_config_script = nil
|
43
47
|
@phantom_cli_options = {}
|
48
|
+
@chrome_cli_options = {"no-sandbox" => nil, "headless" => nil, "remote-debugging-port" => 9222}
|
49
|
+
@chrome_startup_timeout = 3
|
50
|
+
@chrome_binary = nil
|
51
|
+
@runner_browser = :phantomjs
|
44
52
|
|
45
53
|
@formatters = [Jasmine::Formatters::Console]
|
46
54
|
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# require 'phantomjs'
|
2
|
+
require "socket"
|
3
|
+
|
4
|
+
module Jasmine
|
5
|
+
module Runners
|
6
|
+
class ChromeHeadless
|
7
|
+
def initialize(formatter, jasmine_server_url, config)
|
8
|
+
@formatter = formatter
|
9
|
+
@jasmine_server_url = jasmine_server_url
|
10
|
+
@config = config
|
11
|
+
@show_console_log = @config.show_console_log
|
12
|
+
@show_full_stack_trace = @config.show_full_stack_trace
|
13
|
+
@cli_options = @config.chrome_cli_options || {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def run
|
17
|
+
chrome_server = IO.popen("\"#{chrome_binary}\" #{cli_options_string}")
|
18
|
+
wait_for_chrome_to_start_debug_socket
|
19
|
+
|
20
|
+
begin
|
21
|
+
require "chrome_remote"
|
22
|
+
rescue LoadError => e
|
23
|
+
raise 'Add "chrome_remote" you your Gemfile. To use chromeheadless we require this gem.'
|
24
|
+
end
|
25
|
+
|
26
|
+
chrome = ChromeRemote.client
|
27
|
+
chrome.send_cmd "Runtime.enable"
|
28
|
+
chrome.send_cmd "Page.navigate", url: jasmine_server_url
|
29
|
+
result_recived = false
|
30
|
+
run_details = { 'random' => false }
|
31
|
+
chrome.on "Runtime.consoleAPICalled" do |params|
|
32
|
+
if params["type"] == "log"
|
33
|
+
if params["args"][0] && params["args"][0]["value"] == "jasmine_spec_result"
|
34
|
+
results = JSON.parse(params["args"][1]["value"], :max_nesting => false)
|
35
|
+
.map { |r| Result.new(r.merge!("show_full_stack_trace" => @show_full_stack_trace)) }
|
36
|
+
formatter.format(results)
|
37
|
+
elsif params["args"][0] && params["args"][0]["value"] == "jasmine_suite_result"
|
38
|
+
results = JSON.parse(params["args"][1]["value"], :max_nesting => false)
|
39
|
+
.map { |r| Result.new(r.merge!("show_full_stack_trace" => @show_full_stack_trace)) }
|
40
|
+
failures = results.select(&:failed?)
|
41
|
+
if failures.any?
|
42
|
+
formatter.format(failures)
|
43
|
+
end
|
44
|
+
elsif params["args"][0] && params["args"][0]["value"] == "jasmine_done"
|
45
|
+
result_recived = true
|
46
|
+
run_details = JSON.parse(params["args"][1]["value"], :max_nesting => false)
|
47
|
+
elsif show_console_log
|
48
|
+
puts params["args"].map { |e| e["value"] }.join(' ')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
chrome.listen_until {|msg| result_recived }
|
54
|
+
formatter.done(run_details)
|
55
|
+
chrome.send_cmd "Browser.close"
|
56
|
+
Process.kill("INT", chrome_server.pid)
|
57
|
+
end
|
58
|
+
|
59
|
+
def chrome_binary
|
60
|
+
config.chrome_binary || find_chrome_binary
|
61
|
+
end
|
62
|
+
|
63
|
+
def find_chrome_binary
|
64
|
+
path = [
|
65
|
+
"/usr/bin/google-chrome",
|
66
|
+
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
67
|
+
].detect { |path|
|
68
|
+
File.file?(path)
|
69
|
+
}
|
70
|
+
raise "No Chrome binary found" if path.nil?
|
71
|
+
path
|
72
|
+
end
|
73
|
+
|
74
|
+
def cli_options_string
|
75
|
+
@cli_options.
|
76
|
+
map {|(k, v)| if v then "--#{k}=#{v}" else "--#{k}" end }.
|
77
|
+
join(' ')
|
78
|
+
end
|
79
|
+
|
80
|
+
def wait_for_chrome_to_start_debug_socket
|
81
|
+
time = Time.now
|
82
|
+
while Time.now - time < config.chrome_startup_timeout
|
83
|
+
begin;
|
84
|
+
conn = TCPSocket.new('localhost', 9222);
|
85
|
+
rescue SocketError;
|
86
|
+
sleep 0.1
|
87
|
+
next
|
88
|
+
rescue Errno::ECONNREFUSED;
|
89
|
+
sleep 0.1
|
90
|
+
next
|
91
|
+
rescue Errno::EADDRNOTAVAIL;
|
92
|
+
sleep 0.1
|
93
|
+
next
|
94
|
+
else;
|
95
|
+
conn.close;
|
96
|
+
return
|
97
|
+
end
|
98
|
+
end
|
99
|
+
raise "Chrome did't seam to start the webSocketDebugger at port: 9222, timeout #{config.chrome_startup_timeout}sec"
|
100
|
+
end
|
101
|
+
|
102
|
+
def boot_js
|
103
|
+
File.expand_path('chromeheadless_boot.js', File.dirname(__FILE__))
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
attr_reader :formatter, :jasmine_server_url, :show_console_log, :config
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
function ChromeHeadlessReporter() {
|
2
|
+
this.jasmineDone = function(details) {
|
3
|
+
console.log('jasmine_done', JSON.stringify(details));
|
4
|
+
};
|
5
|
+
|
6
|
+
this.specDone = function(results) {
|
7
|
+
console.log('jasmine_spec_result', JSON.stringify([].concat(results)));
|
8
|
+
};
|
9
|
+
|
10
|
+
this.suiteDone = function(results) {
|
11
|
+
console.log('jasmine_suite_result',JSON.stringify([].concat(results)));
|
12
|
+
};
|
13
|
+
}
|
14
|
+
|
15
|
+
jasmine.getEnv().addReporter(new ChromeHeadlessReporter());
|
data/lib/jasmine/version.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Jasmine Gem 3.4 Release Notes
|
2
|
+
|
3
|
+
## Summary
|
4
|
+
|
5
|
+
This release updates the jasmine-core dependency to 3.4.0. See the
|
6
|
+
[jasmine-core release notes](https://github.com/jasmine/jasmine/blob/master/release_notes/3.4.0.md)
|
7
|
+
for more information
|
8
|
+
|
9
|
+
## Changes
|
10
|
+
|
11
|
+
* Chrome headless as an option to phantomJS
|
12
|
+
- Merges [#301](https://github.com/jasmine/jasmine-gem/issues/301) from @stoivo
|
13
|
+
- Fixes [#293](https://github.com/jasmine/jasmine-gem/issues/293)
|
14
|
+
|
15
|
+
------
|
16
|
+
|
17
|
+
_Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jasmine::Runners::ChromeHeadless do
|
4
|
+
|
5
|
+
let(:config) {
|
6
|
+
{
|
7
|
+
show_console_log: nil,
|
8
|
+
show_full_stack_trace: nil,
|
9
|
+
chrome_cli_options: nil,
|
10
|
+
chrome_binary: nil,
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
it 'uses chrome_binary from config is set' do
|
15
|
+
config[:chrome_binary] = "some_path"
|
16
|
+
runner = Jasmine::Runners::ChromeHeadless.new(nil, nil, double(config))
|
17
|
+
|
18
|
+
expect(runner.chrome_binary).to eq("some_path")
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'uses chrome_binary from default chrome path if it exist' do
|
22
|
+
allow(File).to receive(:file?).and_return(true)
|
23
|
+
runner = Jasmine::Runners::ChromeHeadless.new(nil, nil, double(config))
|
24
|
+
|
25
|
+
expect(runner.chrome_binary).to eq("/usr/bin/google-chrome")
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'chrome_binary raise an exeption if nowhere to be found' do
|
29
|
+
allow(File).to receive(:file?).and_return(false)
|
30
|
+
runner = Jasmine::Runners::ChromeHeadless.new(nil, nil, double(config))
|
31
|
+
|
32
|
+
expect {
|
33
|
+
runner.chrome_binary
|
34
|
+
}.to raise_error(RuntimeError)
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "cli_options_string" do
|
38
|
+
it "empty hash is empty result" do
|
39
|
+
runner = Jasmine::Runners::ChromeHeadless.new(nil, nil, double(config))
|
40
|
+
expect(runner.cli_options_string).to eq("")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "formats hash properly" do
|
44
|
+
config[:chrome_cli_options] = {"no-sandbox" => nil, "headless" => nil, "remote-debugging-port" => 9222}
|
45
|
+
runner = Jasmine::Runners::ChromeHeadless.new(nil, nil, double(config))
|
46
|
+
expect(runner.cli_options_string).to eq("--no-sandbox --headless --remote-debugging-port=9222")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
data/spec/jasmine_rails_spec.rb
CHANGED
@@ -63,167 +63,231 @@ if rails_available?
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
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
|
70
72
|
end
|
71
|
-
end
|
72
73
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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')
|
78
83
|
end
|
79
|
-
output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{failing_yaml}`
|
80
|
-
expect($?).to_not be_success
|
81
|
-
expect(output).to include('6 specs, 1 failure')
|
82
84
|
end
|
83
|
-
end
|
84
85
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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')
|
90
95
|
end
|
91
|
-
output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{exception_yaml}`
|
92
|
-
expect($?).to_not be_success
|
93
|
-
expect(output).to include('5 specs, 0 failures')
|
94
96
|
end
|
95
|
-
end
|
96
97
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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'))
|
102
103
|
|
103
|
-
|
104
|
-
|
105
|
-
|
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
|
106
108
|
end
|
107
|
-
end
|
108
109
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
it "rake jasmine runs and serves the expected webpage when using asset pipeline" do
|
111
|
+
open('app/assets/stylesheets/foo.css', 'w') { |f|
|
112
|
+
f.puts "/* hi dere */"
|
113
|
+
f.flush
|
114
|
+
}
|
114
115
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
116
|
+
open('spec/javascripts/helpers/angular_helper.js', 'w') { |f|
|
117
|
+
f.puts "//= require angular-mocks"
|
118
|
+
f.flush
|
119
|
+
}
|
120
|
+
|
121
|
+
css_yaml = custom_jasmine_config('css') do |jasmine_config|
|
122
|
+
jasmine_config['src_files'] = %w[assets/application.js http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js]
|
123
|
+
jasmine_config['stylesheets'] = ['assets/application.css']
|
124
|
+
end
|
119
125
|
|
120
|
-
|
121
|
-
|
122
|
-
|
126
|
+
run_jasmine_server("JASMINE_CONFIG_PATH=#{css_yaml}") do
|
127
|
+
output = Net::HTTP.get(URI.parse('http://localhost:8888/'))
|
128
|
+
expect(output).to match(%r{script src.*/assets/jasmine_examples/Player(\.self-[^\.]+)?\.js})
|
129
|
+
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
|
+
|
134
|
+
output = Net::HTTP.get(URI.parse('http://localhost:8888/__spec__/helpers/angular_helper.js'))
|
135
|
+
expect(output).to match(/angular\.mock/)
|
136
|
+
end
|
123
137
|
end
|
124
138
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
expect(output).to match(%r{script src.*angular_helper\.js})
|
131
|
-
expect(output).to match(%r{<link rel=.stylesheet.*?href=./assets/foo(\.self-[^\.]+)?\.css\?.*?>})
|
139
|
+
it "sets assets_prefix when using sprockets" do
|
140
|
+
open('app/assets/stylesheets/assets_prefix.js.erb', 'w') { |f|
|
141
|
+
f.puts "<%= assets_prefix %>"
|
142
|
+
f.flush
|
143
|
+
}
|
132
144
|
|
133
|
-
|
134
|
-
|
145
|
+
run_jasmine_server do
|
146
|
+
output = Net::HTTP.get(URI.parse('http://localhost:8888/assets/assets_prefix.js'))
|
147
|
+
expect(output).to match("/assets")
|
148
|
+
end
|
135
149
|
end
|
136
|
-
end
|
137
150
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
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'))
|
143
159
|
|
144
|
-
|
145
|
-
|
146
|
-
|
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
|
147
164
|
end
|
148
|
-
end
|
149
165
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
FileUtils.mkdir_p(File.join('public', 'javascripts'))
|
156
|
-
FileUtils.cp(File.join(@root, 'spec', 'fixture', 'non_asset_pipeline.js'), File.join('public', 'javascripts'))
|
157
|
-
FileUtils.cp(File.join(@root, 'spec', 'fixture', 'non_asset_pipeline_test.js'), File.join('spec', 'javascripts'))
|
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
|
158
171
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
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
|
164
179
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
jasmine_config['rack_options'] = { 'server' => 'webrick' }
|
180
|
+
custom_output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{rack_yaml} 2>&1`
|
181
|
+
expect(custom_output).to include("WEBrick")
|
182
|
+
end
|
169
183
|
end
|
170
184
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
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')
|
199
|
+
|
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
|
+
}
|
205
|
+
end
|
206
|
+
|
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
|
177
214
|
end
|
178
215
|
|
179
|
-
|
180
|
-
|
216
|
+
it "serves source mapped assets" do
|
217
|
+
run_jasmine_server do
|
218
|
+
output = Net::HTTP.get(URI.parse('http://localhost:8888/'))
|
219
|
+
|
220
|
+
js_match = output.match %r{script src.*/(assets/application.debug-[^\.]+\.js)}
|
221
|
+
|
222
|
+
expect(js_match).to_not be_nil
|
223
|
+
expect(output).to match(%r{<link rel=.stylesheet.*?href=.*/assets/application.debug-[^\.]+\.css})
|
224
|
+
|
225
|
+
js_path = js_match[1]
|
226
|
+
output = Net::HTTP.get(URI.parse("http://localhost:8888/#{js_path}"))
|
227
|
+
expect(output).to match(%r{//# sourceMappingURL=.*\.map})
|
228
|
+
end
|
229
|
+
end
|
181
230
|
end
|
182
231
|
end
|
183
232
|
|
184
|
-
describe
|
233
|
+
describe "with Chrome headless" do
|
185
234
|
before :all do
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
open('Gemfile', 'a') { |f|
|
190
|
-
f.puts "gem 'sprockets', '~> 4.0.0.beta6'"
|
235
|
+
open('spec/javascripts/support/jasmine_helper.rb', 'w') { |f|
|
236
|
+
f.puts "Jasmine.configure do |config|\n config.runner_browser = :chromeheadless\nend\n"
|
191
237
|
f.flush
|
192
238
|
}
|
239
|
+
end
|
240
|
+
|
241
|
+
|
242
|
+
it "rake jasmine:ci runs and returns expected results", :focus do
|
193
243
|
Bundler.with_clean_env do
|
194
|
-
|
244
|
+
`bundle add chrome_remote`
|
245
|
+
output = `bundle exec rake jasmine:ci`
|
246
|
+
expect(output).to include('5 specs, 0 failures')
|
247
|
+
`bundle remove chrome_remote`
|
195
248
|
end
|
249
|
+
end
|
196
250
|
|
197
|
-
|
251
|
+
it "rake jasmine:ci returns proper exit code when specs fail" do
|
252
|
+
Bundler.with_clean_env do
|
253
|
+
`bundle add chrome_remote`
|
198
254
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
255
|
+
FileUtils.cp(File.join(@root, 'spec', 'fixture', 'failing_test.js'), File.join('spec', 'javascripts'))
|
256
|
+
failing_yaml = custom_jasmine_config('failing') do |jasmine_config|
|
257
|
+
jasmine_config['spec_files'] << 'failing_test.js'
|
258
|
+
end
|
259
|
+
output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{failing_yaml}`
|
260
|
+
expect($?).to_not be_success
|
261
|
+
expect(output).to include('6 specs, 1 failure')
|
262
|
+
`bundle remove chrome_remote`
|
263
|
+
end
|
204
264
|
end
|
205
265
|
|
206
|
-
|
207
|
-
FileUtils.mv 'Gemfile-old', 'Gemfile'
|
208
|
-
FileUtils.rm 'Gemfile.lock'
|
209
|
-
FileUtils.rm 'app/assets/config/manifest.js'
|
266
|
+
it "rake jasmine:ci runs specs when an error occurs in the javascript" do
|
210
267
|
Bundler.with_clean_env do
|
211
|
-
|
268
|
+
`bundle add chrome_remote`
|
269
|
+
FileUtils.cp(File.join(@root, 'spec', 'fixture', 'exception_test.js'), File.join('spec', 'javascripts'))
|
270
|
+
exception_yaml = custom_jasmine_config('exception') do |jasmine_config|
|
271
|
+
jasmine_config['spec_files'] << 'exception_test.js'
|
272
|
+
end
|
273
|
+
output = `bundle exec rake jasmine:ci JASMINE_CONFIG_PATH=#{exception_yaml}`
|
274
|
+
expect($?).to_not be_success
|
275
|
+
expect(output).to include('5 specs, 0 failures')
|
276
|
+
`bundle remove chrome_remote`
|
212
277
|
end
|
213
278
|
end
|
214
279
|
|
215
|
-
it "
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
expect(js_match).to_not be_nil
|
222
|
-
expect(output).to match(%r{<link rel=.stylesheet.*?href=.*/assets/application.debug-[^\.]+\.css})
|
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'
|
283
|
+
end
|
284
|
+
FileUtils.cp(File.join(@root, 'spec', 'fixture', 'coffee_spec.coffee'), File.join('spec', 'javascripts'))
|
223
285
|
|
224
|
-
|
225
|
-
|
226
|
-
|
286
|
+
Bundler.with_clean_env do
|
287
|
+
`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')
|
290
|
+
`bundle remove chrome_remote`
|
227
291
|
end
|
228
292
|
end
|
229
293
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jasmine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Van Hove
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 3.
|
89
|
+
version: 3.4.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 3.
|
96
|
+
version: 3.4.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rack
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,6 +189,8 @@ files:
|
|
189
189
|
- lib/jasmine/result.rb
|
190
190
|
- lib/jasmine/ruby_versions.rb
|
191
191
|
- lib/jasmine/run.html.erb
|
192
|
+
- lib/jasmine/runners/chrome_headless.rb
|
193
|
+
- lib/jasmine/runners/chromeheadless_boot.js
|
192
194
|
- lib/jasmine/runners/phantom_boot.js
|
193
195
|
- lib/jasmine/runners/phantom_jasmine_run.js
|
194
196
|
- lib/jasmine/runners/phantom_js.rb
|
@@ -204,6 +206,7 @@ files:
|
|
204
206
|
- release_notes/3.1.0.md
|
205
207
|
- release_notes/3.2.0.md
|
206
208
|
- release_notes/3.3.0.md
|
209
|
+
- release_notes/3.4.0.md
|
207
210
|
- release_notes/v1.2.1.md
|
208
211
|
- release_notes/v1.3.2.md
|
209
212
|
- release_notes/v2.0.0.md
|
@@ -227,6 +230,7 @@ files:
|
|
227
230
|
- spec/application_integration_spec.rb
|
228
231
|
- spec/application_spec.rb
|
229
232
|
- spec/base_spec.rb
|
233
|
+
- spec/chrome_headless_spec.rb
|
230
234
|
- spec/ci_runner_spec.rb
|
231
235
|
- spec/configuration_spec.rb
|
232
236
|
- spec/fixture/Rakefile
|
@@ -286,6 +290,7 @@ test_files:
|
|
286
290
|
- spec/application_integration_spec.rb
|
287
291
|
- spec/application_spec.rb
|
288
292
|
- spec/base_spec.rb
|
293
|
+
- spec/chrome_headless_spec.rb
|
289
294
|
- spec/ci_runner_spec.rb
|
290
295
|
- spec/configuration_spec.rb
|
291
296
|
- spec/fixture/Rakefile
|