guard-jasmine 0.8.1 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +29 -10
- data/lib/guard/jasmine.rb +35 -8
- data/lib/guard/jasmine/cli.rb +1 -1
- data/lib/guard/jasmine/inspector.rb +4 -4
- data/lib/guard/jasmine/phantomjs/run-jasmine.coffee +12 -1
- data/lib/guard/jasmine/runner.rb +0 -4
- data/lib/guard/jasmine/templates/Guardfile +3 -3
- data/lib/guard/jasmine/version.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -100,21 +100,26 @@ group :development, :test do
|
|
100
100
|
end
|
101
101
|
```
|
102
102
|
|
103
|
-
|
103
|
+
And run following from the Terminal:
|
104
104
|
|
105
|
-
```
|
106
|
-
|
107
|
-
|
108
|
-
|
105
|
+
```bash
|
106
|
+
mkdir -p spec/javascripts
|
107
|
+
echo -e "#=require application\n#=require_tree ./" > spec/javascripts/spec.js.coffee
|
108
|
+
echo -e "/*\n * add css using =require application\n */" > spec/javascripts/spec.css
|
109
109
|
```
|
110
110
|
|
111
|
-
|
111
|
+
This creates the directory `spec/javascripts` where your CoffeeScript tests go into. You define the Rails 3.1
|
112
112
|
asset pipeline manifest in `spec/javascripts/spec.js.coffee`:
|
113
113
|
|
114
114
|
```coffeescript
|
115
|
+
#=require application
|
115
116
|
#=require_tree ./
|
116
117
|
```
|
117
118
|
|
119
|
+
It also creates an empty `spec/javascripts/spec.css` file as it is always requested when running specs.
|
120
|
+
|
121
|
+
Now you can access `/jasmine` url when you start rails server normally.
|
122
|
+
|
118
123
|
## Rails 2 & Rails 3 setup
|
119
124
|
|
120
125
|
With Rails 2 or Rails 3 you can use [the Jasmine Gem][] to configure your Jasmine specs and server the Jasmine
|
@@ -207,14 +212,14 @@ end
|
|
207
212
|
The general options configures the environment that is needed to run Guard::Jasmine:
|
208
213
|
|
209
214
|
```ruby
|
210
|
-
:server => :
|
215
|
+
:server => :jasmine_gem # Jasmine server to use, either :auto, :rack, :jasmine_gem or :none
|
211
216
|
# default: :auto
|
212
217
|
|
213
218
|
:port => 9292 # Jasmine server port to use.
|
214
219
|
# default: 8888
|
215
220
|
|
216
221
|
:phantomjs_bin => '~/bin/phantomjs' # Path to phantomjs.
|
217
|
-
# default: '
|
222
|
+
# default: auto-detect 'phantomjs'
|
218
223
|
|
219
224
|
:timeout => 20000 # The time in ms to wait for the spec runner to finish.
|
220
225
|
# default: 10000
|
@@ -357,9 +362,18 @@ after_script: 'bundle exec guard-jasmine'
|
|
357
362
|
|
358
363
|
## Alternatives
|
359
364
|
|
365
|
+
There are many ways to get your Jasmine specs run within a headless environment. If Guard::Jasmine isn't for you,
|
366
|
+
I recommend to check out these other brilliant Jasmine runners:
|
367
|
+
|
368
|
+
### Guards
|
369
|
+
|
360
370
|
* [guard-jasmine-headless-webkit][], a Guard for [jasmine-headless-webkit][], but doesn't run on JRuby.
|
361
|
-
* [
|
362
|
-
|
371
|
+
* [guard-jasmine-node][] automatically & intelligently executes Jasmine Node.js specs when files are modified.
|
372
|
+
* [guard-jessie][] allows to automatically run you Jasmine specs under Node.js using Jessie runner.
|
373
|
+
|
374
|
+
### Standalone
|
375
|
+
|
376
|
+
* [Evergreen][], runs CoffeeScript specs headless, but has no continuous testing support.
|
363
377
|
* [Jezebel][] a Node.js REPL and continuous test runner for [Jessie][], a Node runner for Jasmine, but has no full
|
364
378
|
featured browser environment.
|
365
379
|
|
@@ -410,6 +424,9 @@ The only argument that the script takes is the URL to the Jasmine runner, which
|
|
410
424
|
```bash
|
411
425
|
$ guard-jasmine-debug http://127.0.0.1:3000/Jasmine?spec=YourSpec
|
412
426
|
```
|
427
|
+
## Contributors
|
428
|
+
|
429
|
+
* [Dmytrii Nagirniak](https://github.com/dnagir)
|
413
430
|
|
414
431
|
## Acknowledgment
|
415
432
|
|
@@ -471,3 +488,5 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
471
488
|
[PhantomJS script]: https://github.com/netzpirat/guard-jasmine/blob/master/lib/guard/jasmine/phantomjs/run-jasmine.coffee
|
472
489
|
[Guard::CoffeeScript]: https://github.com/guard/guard-coffeescript
|
473
490
|
[Sinon.JS]: http://sinonjs.org
|
491
|
+
[guard-jasmine-node]: https://github.com/guard/guard-jasmine-node
|
492
|
+
[guard-jessie]: https://github.com/guard/guard-jessie
|
data/lib/guard/jasmine.rb
CHANGED
@@ -22,7 +22,6 @@ module Guard
|
|
22
22
|
:server => :auto,
|
23
23
|
:port => 8888,
|
24
24
|
:jasmine_url => 'http://localhost:8888/jasmine',
|
25
|
-
:phantomjs_bin => '/usr/local/bin/phantomjs',
|
26
25
|
:timeout => 10000,
|
27
26
|
:notification => true,
|
28
27
|
:hide_success => false,
|
@@ -55,9 +54,11 @@ module Guard
|
|
55
54
|
# @option options [Symbol] :focus options for focus on failures in the specdoc
|
56
55
|
#
|
57
56
|
def initialize(watchers = [], options = { })
|
57
|
+
options[:jasmine_url] = "http://localhost:#{ options[:port] }/jasmine" if options[:port] && !options[:jasmine_url]
|
58
58
|
options = DEFAULT_OPTIONS.merge(options)
|
59
59
|
options[:specdoc] = :failure if ![:always, :never, :failure].include? options[:specdoc]
|
60
60
|
options[:server] = :auto if ![:auto, :none, :rack, :jasmine_gem].include? options[:server]
|
61
|
+
options[:phantomjs_bin] = Jasmine.which('phantomjs') unless options[:phantomjs_bin]
|
61
62
|
|
62
63
|
super(watchers, options)
|
63
64
|
|
@@ -174,14 +175,18 @@ module Guard
|
|
174
175
|
# @return [Boolean] when the runner is available
|
175
176
|
#
|
176
177
|
def phantomjs_bin_valid?(bin)
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
178
|
+
if bin && !bin.empty?
|
179
|
+
version = `#{ bin } --version`
|
180
|
+
|
181
|
+
if !version
|
182
|
+
notify_failure('PhantomJS executable missing', "PhantomJS executable doesn't exist at #{ bin }")
|
183
|
+
elsif version.to_version < '1.3.0'.to_version
|
184
|
+
notify_failure('Wrong PhantomJS version', "PhantomJS executable at #{ bin } must be at least version 1.3.0")
|
185
|
+
else
|
186
|
+
true
|
187
|
+
end
|
183
188
|
else
|
184
|
-
|
189
|
+
notify_failure('PhantomJS executable missing', "PhantomJS executable couldn't be auto detected.")
|
185
190
|
end
|
186
191
|
end
|
187
192
|
|
@@ -199,5 +204,27 @@ module Guard
|
|
199
204
|
false
|
200
205
|
end
|
201
206
|
|
207
|
+
# Cross-platform way of finding an executable in the $PATH.
|
208
|
+
# http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
209
|
+
#
|
210
|
+
# @example
|
211
|
+
# which('ruby') #=> /usr/bin/ruby
|
212
|
+
#
|
213
|
+
# @param cmd [String] the executable to find
|
214
|
+
# @return [String, nil] the path to the executable
|
215
|
+
#
|
216
|
+
def self.which(cmd)
|
217
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
218
|
+
|
219
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
220
|
+
exts.each do |ext|
|
221
|
+
exe = "#{ path }/#{ cmd }#{ ext }"
|
222
|
+
return exe if File.executable?(exe)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
nil
|
227
|
+
end
|
228
|
+
|
202
229
|
end
|
203
230
|
end
|
data/lib/guard/jasmine/cli.rb
CHANGED
@@ -70,7 +70,7 @@ module Guard
|
|
70
70
|
runner[:timeout] = options.timeout
|
71
71
|
runner[:port] = options.port
|
72
72
|
runner[:console] = [:always, :never, :failure].include?(options.console.to_sym) ? options.console.to_sym : :failure
|
73
|
-
runner[:server] = [:auto, :rack, :jasmine_gem].include?(options.server.to_sym) ? options.server.to_sym : :auto
|
73
|
+
runner[:server] = [:auto, :rack, :jasmine_gem, :none].include?(options.server.to_sym) ? options.server.to_sym : :auto
|
74
74
|
|
75
75
|
runner[:notification] = false
|
76
76
|
runner[:hide_success] = true
|
@@ -2,8 +2,8 @@ module Guard
|
|
2
2
|
class Jasmine
|
3
3
|
|
4
4
|
# The inspector verifies if the changed paths are valid
|
5
|
-
# for Guard::Jasmine. Please note that request to {
|
6
|
-
# paths keeps the current valid files cached until {
|
5
|
+
# for Guard::Jasmine. Please note that request to {.clean}
|
6
|
+
# paths keeps the current valid files cached until {.clear} is
|
7
7
|
# called.
|
8
8
|
#
|
9
9
|
module Inspector
|
@@ -49,11 +49,11 @@ module Guard
|
|
49
49
|
# JavaScript and CoffeeScript files in the `spec`
|
50
50
|
# directory.
|
51
51
|
#
|
52
|
-
# @see
|
52
|
+
# @see .clear
|
53
53
|
# @return [Array<String>] the valid files
|
54
54
|
#
|
55
55
|
def jasmine_specs
|
56
|
-
@jasmine_specs ||= Dir.glob('spec/**/*_spec.{js,js.coffee}')
|
56
|
+
@jasmine_specs ||= Dir.glob('spec/**/*_spec.{js,coffee,js.coffee}')
|
57
57
|
end
|
58
58
|
|
59
59
|
end
|
@@ -16,7 +16,18 @@ waitFor = (test, ready, timeout = 5000) ->
|
|
16
16
|
condition = test()
|
17
17
|
else
|
18
18
|
if not condition
|
19
|
-
|
19
|
+
text = page.evaluate -> document.getElementsByTagName('body')[0]?.innerText
|
20
|
+
|
21
|
+
if text
|
22
|
+
error = """
|
23
|
+
Timeout waiting for the Jasmine test results!
|
24
|
+
|
25
|
+
#{ text }
|
26
|
+
"""
|
27
|
+
console.log JSON.stringify({ error: error })
|
28
|
+
else
|
29
|
+
console.log JSON.stringify({ error: 'Timeout waiting for the Jasmine test results!' })
|
30
|
+
|
20
31
|
phantom.exit(1)
|
21
32
|
else
|
22
33
|
ready()
|
data/lib/guard/jasmine/runner.rb
CHANGED
@@ -324,10 +324,6 @@ module Guard
|
|
324
324
|
|
325
325
|
# Formats a message.
|
326
326
|
#
|
327
|
-
# Known message styles:
|
328
|
-
#
|
329
|
-
# - {message} in http.*assets/{spec}?body=\d ({line})
|
330
|
-
#
|
331
327
|
# @param [String] message the error message
|
332
328
|
# @param [Boolean] short show a short version of the message
|
333
329
|
# @return [String] the cleaned error message
|
@@ -1,5 +1,5 @@
|
|
1
1
|
guard 'jasmine' do
|
2
|
-
watch(%r{app/assets/javascripts/(.+)\.(js\.coffee|js)}) { |m| "spec/javascripts/#{m[1]}_spec.#{m[2]}" }
|
3
|
-
watch(%r{spec/javascripts/(.+)_spec\.(js\.coffee|js)}) { |m| "spec/javascripts/#{m[1]}_spec.#{m[2]}" }
|
4
|
-
watch(%r{spec/javascripts/spec\.(js\.coffee|js)}) { "spec/javascripts" }
|
2
|
+
watch(%r{app/assets/javascripts/(.+)\.(js\.coffee|js|coffee)$}) { |m| "spec/javascripts/#{m[1]}_spec.#{m[2]}" }
|
3
|
+
watch(%r{spec/javascripts/(.+)_spec\.(js\.coffee|js|coffee)$}) { |m| puts m.inspect; "spec/javascripts/#{m[1]}_spec.#{m[2]}" }
|
4
|
+
watch(%r{spec/javascripts/spec\.(js\.coffee|js|coffee)$}) { "spec/javascripts" }
|
5
5
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-jasmine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 59
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 2
|
10
|
+
version: 0.8.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Kessler
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
18
|
+
date: 2011-11-06 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: guard
|