jasmine-phantom 0.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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.markdown +39 -0
- data/Rakefile +1 -0
- data/jasmine-phantom.gemspec +29 -0
- data/lib/jasmine-phantom.rb +8 -0
- data/lib/jasmine-phantom/railtie.rb +9 -0
- data/lib/jasmine-phantom/run-jasmine.js +121 -0
- data/lib/jasmine-phantom/tasks.rake +18 -0
- data/lib/jasmine-phantom/version.rb +5 -0
- metadata +80 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
Jasmine Phantom
|
2
|
+
===============
|
3
|
+
|
4
|
+
Jasmine Phantom provides a rake task that runs your jasmine specs via phanstomjs. It is adapted from the jasmine runner example that comes with
|
5
|
+
phantom js. It requires jasmine `>= 1.2.0rc2`, which is only currency available via github.
|
6
|
+
|
7
|
+
Installation
|
8
|
+
------------
|
9
|
+
|
10
|
+
Add jasmine 1.2.0rc2 and jasmine-phantom to your gemfile:
|
11
|
+
|
12
|
+
gem 'jasmine', '1.2.0.rc2',
|
13
|
+
git: "git://github.com/pivotal/jasmine-gem.git",
|
14
|
+
branch: "953d17dff4b4adba79b2a808b55cf33f4ff93af7"
|
15
|
+
|
16
|
+
gem 'jasmine-phantom'
|
17
|
+
|
18
|
+
|
19
|
+
and run `bundle install`.
|
20
|
+
|
21
|
+
Then run `bundle exec rake jasmine` and check `http://localhost:8888/` to make sure you jasmine specs are passing.
|
22
|
+
|
23
|
+
Download and install the appropriate [PhantomJS](http://code.google.com/p/phantomjs/downloads/list) for your platform.
|
24
|
+
Make sure to add the directory with the `phantomjs` executable to your `PATH`.
|
25
|
+
|
26
|
+
Finally, run `bundle exec rake jasmine:phantom:ci` and you should see output similar to:
|
27
|
+
|
28
|
+
Waiting for jasmine server on 57832...
|
29
|
+
[2012-04-18 15:50:52] INFO WEBrick 1.3.1
|
30
|
+
[2012-04-18 15:50:52] INFO ruby 1.9.3 (2011-10-30) [x86_64-darwin10.8.0]
|
31
|
+
[2012-04-18 15:50:52] INFO WEBrick::HTTPServer#start: pid=11608 port=57832
|
32
|
+
Waiting for jasmine server on 57832...
|
33
|
+
jasmine server started.
|
34
|
+
phantomjs /some-path-to/jasmine-phantom/lib/jasmine-phantom/run-jasmine.js http://localhost:57832
|
35
|
+
|
36
|
+
215 specs | 0 failing
|
37
|
+
|
38
|
+
That's it!
|
39
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "jasmine-phantom/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "jasmine-phantom"
|
7
|
+
s.version = Jasmine::Phantom::VERSION
|
8
|
+
s.authors = ["David Vollbracht"]
|
9
|
+
s.email = ["david@flipstone.com"]
|
10
|
+
s.homepage = "http://github.com/flipstone/jasmine-phantom"
|
11
|
+
s.summary = %q{Run you jasmine specs from the commant line using phantomjs}
|
12
|
+
s.description = %q{jasmine-phantom provides a rake task, jasmine:phantom:ci,
|
13
|
+
that runs your jasmine specs via the phantomjs browser just as if you had
|
14
|
+
run rake jasmine and run them manually via your browser.
|
15
|
+
|
16
|
+
You need to have phantomjs installed and in your PATH for the rake task to work}
|
17
|
+
|
18
|
+
s.rubyforge_project = "jasmine-phantom"
|
19
|
+
|
20
|
+
s.files = `git ls-files`.split("\n")
|
21
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
|
25
|
+
# specify any dependencies here; for example:
|
26
|
+
# s.add_development_dependency "rspec"
|
27
|
+
s.add_runtime_dependency "rails", '>= 3.0'
|
28
|
+
s.add_runtime_dependency "jasmine", '>= 1.2.0rc2'
|
29
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
var system = require('system');
|
2
|
+
|
3
|
+
function waitFor(message, testFx, onReady, timeOutMillis) {
|
4
|
+
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001; //< Default Max Timeout is 3s
|
5
|
+
var start = new Date().getTime();
|
6
|
+
var condition = false;
|
7
|
+
var interval = setInterval(function() {
|
8
|
+
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
|
9
|
+
// If not time-out yet and condition not yet fulfilled
|
10
|
+
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
|
11
|
+
} else {
|
12
|
+
if(!condition) {
|
13
|
+
// If condition still not fulfilled (timeout but condition is 'false')
|
14
|
+
console.log("'Timed out waiting for " + message);
|
15
|
+
phantom.exit(1);
|
16
|
+
} else {
|
17
|
+
// Condition fulfilled (timeout and/or condition is 'true')
|
18
|
+
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
|
19
|
+
clearInterval(interval); //< Stop this interval
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}, 100); //< repeat check every 100ms
|
23
|
+
};
|
24
|
+
|
25
|
+
|
26
|
+
if (system.args.length !== 2) {
|
27
|
+
console.log('Usage: run-jasmine.js URL');
|
28
|
+
phantom.exit();
|
29
|
+
}
|
30
|
+
|
31
|
+
var page = require('webpage').create();
|
32
|
+
|
33
|
+
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
|
34
|
+
page.onConsoleMessage = function(msg) {
|
35
|
+
console.log(msg);
|
36
|
+
};
|
37
|
+
|
38
|
+
page.open(system.args[1], function(status){
|
39
|
+
if (status !== "success") {
|
40
|
+
console.log("Unable to access network");
|
41
|
+
phantom.exit();
|
42
|
+
} else {
|
43
|
+
waitFor("Jasmine specs to report finished", function(){
|
44
|
+
return page.evaluate(function(){
|
45
|
+
return jsApiReporter.finished;
|
46
|
+
});
|
47
|
+
}, function(){
|
48
|
+
var summary = page.evaluate(function(){
|
49
|
+
console.log('');
|
50
|
+
var suites = jsApiReporter.suites();
|
51
|
+
var results = jsApiReporter.results();
|
52
|
+
|
53
|
+
for(var specId in results) {
|
54
|
+
var result = results[specId];
|
55
|
+
if (result.result != "passed") {
|
56
|
+
|
57
|
+
var name = findSpecName(specId, suites);
|
58
|
+
|
59
|
+
console.log(name);
|
60
|
+
|
61
|
+
for (var msgId in result.messages) {
|
62
|
+
console.log(' ' + result.messages[msgId]);
|
63
|
+
}
|
64
|
+
|
65
|
+
console.log('');
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
return summarizeResults(suites, results);
|
70
|
+
|
71
|
+
function findSpecName(specId, suites) {
|
72
|
+
for (var i in suites) {
|
73
|
+
if (suites[i].id == specId) {
|
74
|
+
return suites[i].name;
|
75
|
+
}
|
76
|
+
|
77
|
+
var name = findSpecName(specId, suites[i].children);
|
78
|
+
|
79
|
+
if (name) { return suites[i].name + ' ' + name };
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
function summarizeResults(suites, results) {
|
84
|
+
var total = { total: 0, passed: 0, failed: 0 }
|
85
|
+
|
86
|
+
for (var i in suites) {
|
87
|
+
var suite = suites[i];
|
88
|
+
|
89
|
+
if (suite.type == 'spec') {
|
90
|
+
total.total++;
|
91
|
+
|
92
|
+
if (results[suite.id].result == 'passed') {
|
93
|
+
total.passed++;
|
94
|
+
} else {
|
95
|
+
total.failed++;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
var subTotal = summarizeResults(suite.children, results);
|
100
|
+
total.total += subTotal.total;
|
101
|
+
total.passed += subTotal.passed;
|
102
|
+
total.failed += subTotal.failed;
|
103
|
+
}
|
104
|
+
|
105
|
+
return total;
|
106
|
+
}
|
107
|
+
|
108
|
+
return passed;
|
109
|
+
});
|
110
|
+
|
111
|
+
console.log(summary.total + ' specs | ' + summary.failed + ' failing');
|
112
|
+
|
113
|
+
if (summary.passed == summary.total) {
|
114
|
+
phantom.exit();
|
115
|
+
} else {
|
116
|
+
phantom.exit(1);
|
117
|
+
}
|
118
|
+
});
|
119
|
+
}
|
120
|
+
|
121
|
+
});
|
@@ -0,0 +1,18 @@
|
|
1
|
+
namespace :jasmine do
|
2
|
+
namespace :phantom do
|
3
|
+
desc "Run jasmine specs using phantomjs and report the results"
|
4
|
+
task :ci => "jasmine:require" do
|
5
|
+
jasmine_config_overrides = File.join(Jasmine::Config.new.project_root, 'spec', 'javascripts' ,'support' ,'jasmine_config.rb')
|
6
|
+
require jasmine_config_overrides if File.exist?(jasmine_config_overrides)
|
7
|
+
|
8
|
+
config = Jasmine::Config.new
|
9
|
+
config.start_jasmine_server
|
10
|
+
|
11
|
+
# omg config.jasmine_port finds a new unused port every time!
|
12
|
+
port = config.instance_variable_get :@jasmine_server_port
|
13
|
+
|
14
|
+
script = File.join File.dirname(__FILE__), 'run-jasmine.js'
|
15
|
+
sh "phantomjs #{script} http://localhost:#{port}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jasmine-phantom
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- David Vollbracht
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: &2153382420 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2153382420
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: jasmine
|
27
|
+
requirement: &2153381920 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.2.0rc2
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2153381920
|
36
|
+
description: ! "jasmine-phantom provides a rake task, jasmine:phantom:ci,\n that
|
37
|
+
runs your jasmine specs via the phantomjs browser just as if you had\n run
|
38
|
+
rake jasmine and run them manually via your browser.\n\n You
|
39
|
+
need to have phantomjs installed and in your PATH for the rake task to work"
|
40
|
+
email:
|
41
|
+
- david@flipstone.com
|
42
|
+
executables: []
|
43
|
+
extensions: []
|
44
|
+
extra_rdoc_files: []
|
45
|
+
files:
|
46
|
+
- .gitignore
|
47
|
+
- Gemfile
|
48
|
+
- README.markdown
|
49
|
+
- Rakefile
|
50
|
+
- jasmine-phantom.gemspec
|
51
|
+
- lib/jasmine-phantom.rb
|
52
|
+
- lib/jasmine-phantom/railtie.rb
|
53
|
+
- lib/jasmine-phantom/run-jasmine.js
|
54
|
+
- lib/jasmine-phantom/tasks.rake
|
55
|
+
- lib/jasmine-phantom/version.rb
|
56
|
+
homepage: http://github.com/flipstone/jasmine-phantom
|
57
|
+
licenses: []
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project: jasmine-phantom
|
76
|
+
rubygems_version: 1.8.6
|
77
|
+
signing_key:
|
78
|
+
specification_version: 3
|
79
|
+
summary: Run you jasmine specs from the commant line using phantomjs
|
80
|
+
test_files: []
|