guard-jasmine 2.0.0 → 2.0.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/lib/generators/guard_jasmine/install_generator.rb +2 -3
- data/lib/generators/guard_jasmine/templates/Guardfile +4 -4
- data/lib/guard/jasmine.rb +14 -21
- data/lib/guard/jasmine/cli.rb +5 -10
- data/lib/guard/jasmine/coverage.rb +7 -9
- data/lib/guard/jasmine/formatter.rb +8 -11
- data/lib/guard/jasmine/inspector.rb +1 -4
- data/lib/guard/jasmine/phantomjs/guard-jasmine.js +12 -4
- data/lib/guard/jasmine/phantomjs/src/guard-jasmine.coffee +14 -4
- data/lib/guard/jasmine/runner.rb +508 -523
- data/lib/guard/jasmine/server.rb +42 -43
- data/lib/guard/jasmine/task.rb +2 -5
- data/lib/guard/jasmine/util.rb +1 -5
- data/lib/guard/jasmine/version.rb +1 -1
- metadata +16 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 653c1770a0ee0afde89d96bc6b55e89523f9e6a7
|
4
|
+
data.tar.gz: 9da1156f41c0da97723d2ab83b908b02b7588faf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19f799979a9d26cc253abffd4e5ddf34d3c95e56ac0443f5d79242a3d6659eb31bdea642445c1edc52e836925ab4440647dda3c743a2e348201731dbc84f16b1
|
7
|
+
data.tar.gz: 1bd4ab0e7aa91dd28e1f031fb113b2c95930a6b2bdcac7b9b8101a0494cda518f414565d9b800840402c34a4cc492dc29630cb1743be7e4d6380f9b2411e9b04
|
@@ -2,7 +2,7 @@ require 'rails/generators'
|
|
2
2
|
|
3
3
|
module GuardJasmine
|
4
4
|
class InstallGenerator < Rails::Generators::Base
|
5
|
-
desc
|
5
|
+
desc 'Install a sample Guardfile for running Jasmine specs via GuardJasmine'
|
6
6
|
|
7
7
|
def self.source_root
|
8
8
|
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
@@ -10,8 +10,7 @@ module GuardJasmine
|
|
10
10
|
|
11
11
|
# Generator Code. Remember this is just suped-up Thor so methods are executed in order
|
12
12
|
def install
|
13
|
-
template
|
13
|
+
template 'Guardfile'
|
14
14
|
end
|
15
|
-
|
16
15
|
end
|
17
16
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
# More info at https://github.com/guard/guard#readme
|
3
3
|
|
4
4
|
guard :jasmine do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
watch(%r{^spec/javascripts/.*(?:_s|S)pec\.(coffee|js)$})
|
6
|
+
watch(%r{app/assets/javascripts/(.+?)\.(js\.coffee|js|coffee)(?:\.\w+)*$}) do |m|
|
7
|
+
"spec/javascripts/jasmine/#{ m[1] }_spec.#{ m[2] }"
|
8
|
+
end
|
9
9
|
end
|
data/lib/guard/jasmine.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
|
3
|
-
require
|
4
|
-
require 'guard/plugin'
|
3
|
+
# Don't require "guard/plugin" here or in any other plugin's files
|
4
|
+
require 'guard/compat/plugin'
|
5
5
|
|
6
6
|
module Guard
|
7
|
-
|
8
7
|
# The Jasmine guard that gets notifications about the following
|
9
8
|
# Guard events: `start`, `stop`, `reload`, `run_all` and `run_on_modifications`.
|
10
9
|
#
|
11
10
|
class Jasmine < Plugin
|
12
|
-
|
13
11
|
require 'guard/jasmine/coverage'
|
14
12
|
require 'guard/jasmine/inspector'
|
15
13
|
require 'guard/jasmine/runner'
|
@@ -43,7 +41,7 @@ module Guard
|
|
43
41
|
focus: true,
|
44
42
|
coverage: false,
|
45
43
|
coverage_html: false,
|
46
|
-
coverage_html_dir:
|
44
|
+
coverage_html_dir: './coverage',
|
47
45
|
coverage_summary: false,
|
48
46
|
statements_threshold: 0,
|
49
47
|
functions_threshold: 0,
|
@@ -88,17 +86,17 @@ module Guard
|
|
88
86
|
# @option options [Symbol] :lines_threshold options for the statement lines threshold
|
89
87
|
# @option options [Hash] :run_all options overwrite options when run all specs
|
90
88
|
#
|
91
|
-
def initialize(options = {
|
89
|
+
def initialize(options = {})
|
92
90
|
options[:server_mount] ||= defined?(JasmineRails) ? '/specs' : '/jasmine'
|
93
91
|
|
94
92
|
options = DEFAULT_OPTIONS.merge(options)
|
95
93
|
|
96
|
-
options[:spec_dir] ||= File.
|
94
|
+
options[:spec_dir] ||= File.exist?(File.join('spec', 'javascripts')) ? File.join('spec', 'javascripts') : 'spec'
|
97
95
|
options[:server] ||= :auto
|
98
96
|
options[:server] = ::Guard::Jasmine::Server.detect_server(options[:spec_dir]) if options[:server] == :auto
|
99
97
|
options[:port] ||= ::Guard::Jasmine::Server.choose_server_port(options)
|
100
98
|
options[:jasmine_url] = "http://localhost:#{ options[:port] }#{ options[:server] == :jasmine_gem ? '/' : options[:server_mount] }" unless options[:jasmine_url]
|
101
|
-
options[:specdoc] = :failure
|
99
|
+
options[:specdoc] = :failure unless [:always, :never, :failure].include? options[:specdoc]
|
102
100
|
options[:phantomjs_bin] = Jasmine.which('phantomjs') unless options[:phantomjs_bin]
|
103
101
|
|
104
102
|
self.run_all_options = options.delete(:run_all) || {}
|
@@ -107,7 +105,7 @@ module Guard
|
|
107
105
|
|
108
106
|
self.last_run_failed = false
|
109
107
|
self.last_failed_paths = []
|
110
|
-
@runner = Runner.new(
|
108
|
+
@runner = Runner.new(options.merge(run_all_options))
|
111
109
|
end
|
112
110
|
|
113
111
|
# Gets called once when Guard starts.
|
@@ -119,9 +117,7 @@ module Guard
|
|
119
117
|
|
120
118
|
Server.start(options) unless options[:server] == :none
|
121
119
|
|
122
|
-
if Jasmine.runner_available?(options)
|
123
|
-
run_all if options[:all_on_start]
|
124
|
-
end
|
120
|
+
run_all if Jasmine.runner_available?(options) && options[:all_on_start]
|
125
121
|
else
|
126
122
|
throw :task_has_failed
|
127
123
|
end
|
@@ -154,7 +150,7 @@ module Guard
|
|
154
150
|
self.last_failed_paths = results.keys
|
155
151
|
self.last_run_failed = !results.empty?
|
156
152
|
|
157
|
-
throw :task_has_failed if
|
153
|
+
throw :task_has_failed if last_run_failed
|
158
154
|
end
|
159
155
|
# Gets called when watched paths and files have changes.
|
160
156
|
#
|
@@ -162,8 +158,7 @@ module Guard
|
|
162
158
|
# @raise [:task_has_failed] when run_on_modifications has failed
|
163
159
|
#
|
164
160
|
def run_on_modifications(paths)
|
165
|
-
|
166
|
-
specs = options[:keep_failed] ? paths + self.last_failed_paths : paths
|
161
|
+
specs = options[:keep_failed] ? paths + last_failed_paths : paths
|
167
162
|
specs = Inspector.clean(specs, options) if options[:clean]
|
168
163
|
|
169
164
|
return false if specs.empty?
|
@@ -171,17 +166,15 @@ module Guard
|
|
171
166
|
results = runner.run(specs)
|
172
167
|
|
173
168
|
if results.empty?
|
174
|
-
self.last_failed_paths =
|
175
|
-
run_all if
|
169
|
+
self.last_failed_paths = last_failed_paths - paths
|
170
|
+
run_all if last_run_failed && options[:all_after_pass]
|
176
171
|
else
|
177
|
-
self.last_failed_paths =
|
172
|
+
self.last_failed_paths = last_failed_paths + results.keys
|
178
173
|
end
|
179
174
|
|
180
175
|
self.last_run_failed = !results.empty?
|
181
176
|
|
182
|
-
throw :task_has_failed if
|
177
|
+
throw :task_has_failed if last_run_failed
|
183
178
|
end
|
184
|
-
|
185
179
|
end
|
186
180
|
end
|
187
|
-
|
data/lib/guard/jasmine/cli.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'thor'
|
2
|
-
require 'guard/ui'
|
3
2
|
require 'guard/jasmine/version'
|
4
3
|
require 'guard/jasmine/runner'
|
5
4
|
require 'guard/jasmine/formatter'
|
@@ -9,7 +8,6 @@ require 'guard/jasmine/server'
|
|
9
8
|
|
10
9
|
module Guard
|
11
10
|
class Jasmine
|
12
|
-
|
13
11
|
# Small helper class to run the Jasmine runner_options once from the
|
14
12
|
# command line. This can be useful to integrate guard-jasmine
|
15
13
|
# into a continuous integration server.
|
@@ -119,7 +117,7 @@ module Guard
|
|
119
117
|
|
120
118
|
method_option :coverage_html_dir,
|
121
119
|
type: :string,
|
122
|
-
default:
|
120
|
+
default: './coverage',
|
123
121
|
desc: 'Where to save html coverage reports. Defaults to ./coverage. Implies --coverage-html'
|
124
122
|
|
125
123
|
method_option :coverage_summary,
|
@@ -129,7 +127,7 @@ module Guard
|
|
129
127
|
|
130
128
|
method_option :ignore_instrumentation,
|
131
129
|
type: :string,
|
132
|
-
default:
|
130
|
+
default: '',
|
133
131
|
desc: 'Files matching this regex will not be instrumented (e.g. vendor)'
|
134
132
|
|
135
133
|
method_option :statements_threshold,
|
@@ -175,7 +173,7 @@ module Guard
|
|
175
173
|
def spec(*paths)
|
176
174
|
runner_options = {}
|
177
175
|
runner_options[:port] = options.port || CLI.find_free_server_port
|
178
|
-
runner_options[:spec_dir] = options.spec_dir || (File.
|
176
|
+
runner_options[:spec_dir] = options.spec_dir || (File.exist?(File.join('spec', 'javascripts')) ? File.join('spec', 'javascripts') : 'spec')
|
179
177
|
runner_options[:line_number] = options.line_number
|
180
178
|
runner_options[:server] = options.server.to_sym == :auto ? ::Guard::Jasmine::Server.detect_server(runner_options[:spec_dir]) : options.server.to_sym
|
181
179
|
runner_options[:server_mount] = options.mount || (defined?(JasmineRails) ? '/specs' : '/jasmine')
|
@@ -190,8 +188,8 @@ module Guard
|
|
190
188
|
runner_options[:errors] = [:always, :never, :failure].include?(options.errors.to_sym) ? options.errors.to_sym : :failure
|
191
189
|
runner_options[:specdoc] = [:always, :never, :failure].include?(options.specdoc.to_sym) ? options.specdoc.to_sym : :always
|
192
190
|
runner_options[:focus] = options.focus
|
193
|
-
runner_options[:coverage] = options.coverage || options.coverage_html || options.coverage_summary || options.coverage_html_dir !=
|
194
|
-
runner_options[:coverage_html] = options.coverage_html || options.coverage_html_dir !=
|
191
|
+
runner_options[:coverage] = options.coverage || options.coverage_html || options.coverage_summary || options.coverage_html_dir != './coverage'
|
192
|
+
runner_options[:coverage_html] = options.coverage_html || options.coverage_html_dir != './coverage'
|
195
193
|
runner_options[:coverage_html_dir] = options.coverage_html_dir
|
196
194
|
runner_options[:coverage_summary] = options.coverage_summary
|
197
195
|
runner_options[:ignore_instrumentation] = options.ignore_instrumentation
|
@@ -207,8 +205,6 @@ module Guard
|
|
207
205
|
runner_options[:junit_save_path] = options.junit_save_path
|
208
206
|
runner_options[:is_cli] = true
|
209
207
|
|
210
|
-
::Guard::UI.options = ::Guard::UI.options.merge({ :template => ':message' })
|
211
|
-
|
212
208
|
paths = [runner_options[:spec_dir]] if paths.empty?
|
213
209
|
|
214
210
|
if CLI.phantomjs_bin_valid?(runner_options[:phantomjs_bin])
|
@@ -245,7 +241,6 @@ module Guard
|
|
245
241
|
def version
|
246
242
|
::Guard::UI.info "Guard::Jasmine version #{ ::Guard::JasmineVersion::VERSION }"
|
247
243
|
end
|
248
|
-
|
249
244
|
end
|
250
245
|
end
|
251
246
|
end
|
@@ -15,32 +15,30 @@ class JasmineCoverage < Tilt::Template
|
|
15
15
|
|
16
16
|
# Returns a coverage instrumented JavaScript file
|
17
17
|
#
|
18
|
-
def evaluate(
|
18
|
+
def evaluate(_context, _locals)
|
19
19
|
return data if !ENV['IGNORE_INSTRUMENTATION'].to_s.empty? && file =~ Regexp.new(ENV['IGNORE_INSTRUMENTATION'])
|
20
20
|
return data unless JasmineCoverage.coverage_bin
|
21
21
|
return data unless file.include?(JasmineCoverage.app_asset_path)
|
22
22
|
|
23
23
|
Dir.mktmpdir do |path|
|
24
24
|
filename = File.basename(file)
|
25
|
-
input = File.join(path, filename).sub
|
25
|
+
input = File.join(path, filename).sub(/\.js.+/, '.js')
|
26
26
|
|
27
27
|
File.write input, data
|
28
28
|
|
29
|
-
result =
|
29
|
+
result = `#{JasmineCoverage.coverage_bin} instrument --embed-source #{input.shellescape}`
|
30
30
|
|
31
|
-
|
31
|
+
fail "Could not generate coverage instrumented file for #{ file }" unless $CHILD_STATUS.exitstatus == 0
|
32
32
|
|
33
33
|
result.gsub input, file
|
34
|
-
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
|
-
private
|
39
|
-
|
40
37
|
# Get the absolute path to the projects assets path `/app/assets`.
|
41
38
|
#
|
42
39
|
# @return [String] the path to the Rails assets
|
43
40
|
#
|
41
|
+
# @private
|
44
42
|
def self.app_asset_path
|
45
43
|
@app_asset_path ||= File.join(Rails.root, 'app', 'assets')
|
46
44
|
end
|
@@ -49,13 +47,13 @@ class JasmineCoverage < Tilt::Template
|
|
49
47
|
#
|
50
48
|
# @return [String] the path
|
51
49
|
#
|
50
|
+
# @private
|
52
51
|
def self.coverage_bin
|
53
52
|
@coverage_bin ||= which 'istanbul'
|
54
53
|
end
|
55
|
-
|
56
54
|
end
|
57
55
|
|
58
|
-
if ENV['COVERAGE'] == 'true'
|
56
|
+
if ENV['COVERAGE'] == 'true' && defined?(Rails)
|
59
57
|
|
60
58
|
# Guard::Jasmine engine to register coverage instrumented
|
61
59
|
# Jasmine spec files.
|
@@ -1,20 +1,18 @@
|
|
1
1
|
module Guard
|
2
2
|
class Jasmine
|
3
|
-
|
4
3
|
# The Guard::Jasmine formatter collects console and
|
5
4
|
# system notification methods and enhances them with
|
6
5
|
# some color information.
|
7
6
|
#
|
8
7
|
module Formatter
|
9
8
|
class << self
|
10
|
-
|
11
9
|
# Print an info message to the console.
|
12
10
|
#
|
13
11
|
# @param [String] message the message to print
|
14
12
|
# @param [Hash] options the output options
|
15
13
|
# @option options [Boolean] :reset reset the UI
|
16
14
|
#
|
17
|
-
def info(message, options = {
|
15
|
+
def info(message, options = {})
|
18
16
|
::Guard::UI.info(message, options)
|
19
17
|
end
|
20
18
|
|
@@ -24,7 +22,7 @@ module Guard
|
|
24
22
|
# @param [Hash] options the output options
|
25
23
|
# @option options [Boolean] :reset reset the UI
|
26
24
|
#
|
27
|
-
def debug(message, options = {
|
25
|
+
def debug(message, options = {})
|
28
26
|
::Guard::UI.debug(message, options)
|
29
27
|
end
|
30
28
|
|
@@ -34,7 +32,7 @@ module Guard
|
|
34
32
|
# @param [Hash] options the output options
|
35
33
|
# @option options [Boolean] :reset reset the UI
|
36
34
|
#
|
37
|
-
def error(message, options = {
|
35
|
+
def error(message, options = {})
|
38
36
|
::Guard::UI.error(color(message, ';31'), options)
|
39
37
|
end
|
40
38
|
|
@@ -44,7 +42,7 @@ module Guard
|
|
44
42
|
# @param [Hash] options the output options
|
45
43
|
# @option options [Boolean] :reset reset the UI
|
46
44
|
#
|
47
|
-
def success(message, options = {
|
45
|
+
def success(message, options = {})
|
48
46
|
::Guard::UI.info(color(message, ';32'), options)
|
49
47
|
end
|
50
48
|
|
@@ -54,7 +52,7 @@ module Guard
|
|
54
52
|
# @param [Hash] options the output options
|
55
53
|
# @option options [Boolean] :reset reset the UI
|
56
54
|
#
|
57
|
-
def spec_pending(message, options = {
|
55
|
+
def spec_pending(message, options = {})
|
58
56
|
::Guard::UI.info(color(message, ';33'), options)
|
59
57
|
end
|
60
58
|
|
@@ -63,7 +61,7 @@ module Guard
|
|
63
61
|
# @param [String] message the message to print
|
64
62
|
# @param [Hash] options the output options
|
65
63
|
#
|
66
|
-
def spec_failed(message, options = {
|
64
|
+
def spec_failed(message, options = {})
|
67
65
|
::Guard::UI.info(color(message, ';31'), options)
|
68
66
|
end
|
69
67
|
|
@@ -72,7 +70,7 @@ module Guard
|
|
72
70
|
# @param [String] message the message to print
|
73
71
|
# @param [Hash] options the output options
|
74
72
|
#
|
75
|
-
def suite_name(message, options = {
|
73
|
+
def suite_name(message, options = {})
|
76
74
|
::Guard::UI.info(color(message, ';33'), options)
|
77
75
|
end
|
78
76
|
|
@@ -83,7 +81,7 @@ module Guard
|
|
83
81
|
# @option options [Symbol, String] :image the image to use, either :failed, :pending or :success, or an image path
|
84
82
|
# @option options [String] :title the title of the system notification
|
85
83
|
#
|
86
|
-
def notify(message, options = {
|
84
|
+
def notify(message, options = {})
|
87
85
|
::Guard::Notifier.notify(message, options)
|
88
86
|
end
|
89
87
|
|
@@ -97,7 +95,6 @@ module Guard
|
|
97
95
|
def color(text, color_code)
|
98
96
|
::Guard::UI.send(:color_enabled?) ? "\e[0#{ color_code }m#{ text }\e[0m" : text
|
99
97
|
end
|
100
|
-
|
101
98
|
end
|
102
99
|
end
|
103
100
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Guard
|
2
2
|
class Jasmine
|
3
|
-
|
4
3
|
# The inspector verifies if the changed paths are valid
|
5
4
|
# for Guard::Jasmine. Please note that request to {.clean}
|
6
5
|
# paths keeps the current valid files cached until {.clear} is
|
@@ -8,7 +7,6 @@ module Guard
|
|
8
7
|
#
|
9
8
|
module Inspector
|
10
9
|
class << self
|
11
|
-
|
12
10
|
# Clean the changed paths and return only valid
|
13
11
|
# Jasmine specs in either JavaScript or CoffeeScript.
|
14
12
|
#
|
@@ -37,9 +35,8 @@ module Guard
|
|
37
35
|
# @return [Boolean] when the file valid
|
38
36
|
#
|
39
37
|
def jasmine_spec?(path)
|
40
|
-
path =~ /(?:_s|S)pec\.(js|coffee|js\.coffee)$/ && File.
|
38
|
+
path =~ /(?:_s|S)pec\.(js|coffee|js\.coffee)$/ && File.exist?(path)
|
41
39
|
end
|
42
|
-
|
43
40
|
end
|
44
41
|
end
|
45
42
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
(function() {
|
2
|
-
var exitSuccessfully, jasmineAvailable, options, page, reportError, reporterMissing, reporterReady, specsDone, specsTimedout, waitFor;
|
2
|
+
var exitSuccessfully, jasmineAvailable, options, page, phantomExit, reportError, reporterMissing, reporterReady, specsDone, specsTimedout, waitFor;
|
3
3
|
|
4
4
|
options = {
|
5
5
|
url: phantom.args[0] || 'http://127.0.0.1:3000/jasmine',
|
@@ -60,13 +60,20 @@
|
|
60
60
|
});
|
61
61
|
};
|
62
62
|
|
63
|
+
phantomExit = function(exitCode) {
|
64
|
+
page.close();
|
65
|
+
return setTimeout(function() {
|
66
|
+
return phantom.exit(exitCode);
|
67
|
+
}, 0);
|
68
|
+
};
|
69
|
+
|
63
70
|
exitSuccessfully = function() {
|
64
71
|
var results;
|
65
72
|
results = page.evaluate(function() {
|
66
73
|
return window.reporter.results();
|
67
74
|
});
|
68
75
|
console.log(JSON.stringify(results));
|
69
|
-
return
|
76
|
+
return phantomExit();
|
70
77
|
};
|
71
78
|
|
72
79
|
specsTimedout = function() {
|
@@ -75,7 +82,8 @@
|
|
75
82
|
var _ref;
|
76
83
|
return (_ref = document.getElementsByTagName('body')[0]) != null ? _ref.innerText : void 0;
|
77
84
|
});
|
78
|
-
|
85
|
+
reportError("Timeout waiting for the Jasmine test results!\n\n" + text);
|
86
|
+
return phantomExit(1);
|
79
87
|
};
|
80
88
|
|
81
89
|
waitFor = function(test, ready, timeout, timeoutFunction) {
|
@@ -114,7 +122,7 @@
|
|
114
122
|
error: msg,
|
115
123
|
trace: trace
|
116
124
|
}));
|
117
|
-
return
|
125
|
+
return phantomExit(1);
|
118
126
|
};
|
119
127
|
|
120
128
|
}).call(this);
|
@@ -55,21 +55,31 @@ specsDone = ->
|
|
55
55
|
result = page.evaluate ->
|
56
56
|
window.reporter.resultComplete
|
57
57
|
|
58
|
+
# Workaround for https://github.com/ariya/phantomjs/issues/12697 since
|
59
|
+
# it doesn't seem like there will be another 1.9.x release fixing this
|
60
|
+
phantomExit = (exitCode)->
|
61
|
+
page.close()
|
62
|
+
setTimeout( ->
|
63
|
+
phantom.exit(exitCode)
|
64
|
+
,0)
|
65
|
+
|
66
|
+
|
58
67
|
# We should end up here. Logs the results as JSON and exits
|
59
68
|
exitSuccessfully = ->
|
60
69
|
results = page.evaluate -> window.reporter.results()
|
61
70
|
console.log JSON.stringify( results )
|
62
|
-
|
71
|
+
phantomExit()
|
63
72
|
|
64
73
|
|
65
74
|
# Error message for when specs time out
|
66
75
|
specsTimedout = ->
|
67
|
-
|
68
|
-
|
76
|
+
text = page.evaluate -> document.getElementsByTagName('body')[0]?.innerText
|
77
|
+
reportError """
|
69
78
|
Timeout waiting for the Jasmine test results!
|
70
79
|
|
71
80
|
#{ text }
|
72
81
|
"""
|
82
|
+
return phantomExit(1)
|
73
83
|
|
74
84
|
# Wait until the test condition is true or a timeout occurs.
|
75
85
|
#
|
@@ -98,4 +108,4 @@ reportError = (msg, trace=[])->
|
|
98
108
|
err = new Error();
|
99
109
|
trace = err.stack
|
100
110
|
console.log JSON.stringify({ error: msg, trace: trace })
|
101
|
-
|
111
|
+
return phantomExit(1)
|