test_squad 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +194 -0
- data/Rakefile +18 -0
- data/app/assets/javascripts/jasmine/boot.js +67 -0
- data/app/assets/javascripts/test_squad/jasmine-phantom.js +85 -0
- data/app/assets/javascripts/test_squad/mocha-reporter.js +104 -0
- data/app/assets/javascripts/test_squad/qunit-phantom.js +84 -0
- data/app/assets/stylesheets/test_squad/ember.css +16 -0
- data/app/controllers/test_squad_controller.rb +6 -0
- data/app/views/test_squad/ember.html.erb +14 -0
- data/app/views/test_squad/jasmine.html.erb +15 -0
- data/app/views/test_squad/mocha.html.erb +11 -0
- data/app/views/test_squad/qunit.html.erb +13 -0
- data/config/routes.rb +5 -0
- data/lib/generators/test_squad/install/USAGE +8 -0
- data/lib/generators/test_squad/install/install_generator.rb +86 -0
- data/lib/generators/test_squad/install/templates/ember/router_test.js +11 -0
- data/lib/generators/test_squad/install/templates/ember/test_helper.js.erb +15 -0
- data/lib/generators/test_squad/install/templates/jasmine/answer_spec.js +6 -0
- data/lib/generators/test_squad/install/templates/jasmine/spec_helper.js.erb +3 -0
- data/lib/generators/test_squad/install/templates/mocha/answer_spec.js +6 -0
- data/lib/generators/test_squad/install/templates/mocha/spec_helper.js.erb +12 -0
- data/lib/generators/test_squad/install/templates/qunit/answer_test.js +6 -0
- data/lib/generators/test_squad/install/templates/qunit/test_helper.js.erb +3 -0
- data/lib/generators/test_squad/install/templates/test_squad.rb.erb +5 -0
- data/lib/tasks/test_squad_tasks.rake +39 -0
- data/lib/terminal.png +0 -0
- data/lib/test_squad.rb +26 -0
- data/lib/test_squad/engine.rb +36 -0
- data/lib/test_squad/version.rb +3 -0
- data/phantomjs/helpers.js +24 -0
- data/phantomjs/runner.js +176 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +29 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +38 -0
- data/test/dummy/config/environments/production.rb +76 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +9 -0
- data/test/lib/generators/squad/install_generator_test.rb +14 -0
- data/test/test_helper.rb +17 -0
- data/test/test_squad_test.rb +7 -0
- data/vendor/assets/libs/jasmine/boot.js +120 -0
- data/vendor/assets/libs/jasmine/console.js +190 -0
- data/vendor/assets/libs/jasmine/jasmine-html.js +404 -0
- data/vendor/assets/libs/jasmine/jasmine.css +62 -0
- data/vendor/assets/libs/jasmine/jasmine.js +2908 -0
- data/vendor/assets/libs/jasmine/jasmine_favicon.png +0 -0
- metadata +186 -0
@@ -0,0 +1,84 @@
|
|
1
|
+
(function(){
|
2
|
+
if (!navigator.userAgent.match(/phantomjs/i)) {
|
3
|
+
return;
|
4
|
+
}
|
5
|
+
|
6
|
+
var stats = {
|
7
|
+
passes: 0,
|
8
|
+
fails: 0,
|
9
|
+
pending: 0,
|
10
|
+
elapsed: 0,
|
11
|
+
assertions: 0,
|
12
|
+
tests: 0
|
13
|
+
};
|
14
|
+
|
15
|
+
var start, assertion;
|
16
|
+
|
17
|
+
QUnit.testStart(function(data){
|
18
|
+
assertion = null;
|
19
|
+
stats.tests += 1;
|
20
|
+
|
21
|
+
callPhantom({
|
22
|
+
name: 'test start',
|
23
|
+
title: data.name
|
24
|
+
});
|
25
|
+
});
|
26
|
+
|
27
|
+
QUnit.log(function(data){
|
28
|
+
stats.assertions += 1;
|
29
|
+
|
30
|
+
if (!assertion && !data.result) {
|
31
|
+
assertion = data;
|
32
|
+
}
|
33
|
+
});
|
34
|
+
|
35
|
+
QUnit.moduleStart(function(data){
|
36
|
+
callPhantom({
|
37
|
+
name: 'suite start',
|
38
|
+
title: data.name
|
39
|
+
});
|
40
|
+
});
|
41
|
+
|
42
|
+
QUnit.testDone(function(data){
|
43
|
+
var error;
|
44
|
+
|
45
|
+
if (data.failed) {
|
46
|
+
stats.fails += 1;
|
47
|
+
error = assertion.message;
|
48
|
+
|
49
|
+
if (assertion.source) {
|
50
|
+
error += '\n' + assertion.source;
|
51
|
+
}
|
52
|
+
|
53
|
+
error = error.replace(/(Died on test #\d+)/gmi, '$1\n');
|
54
|
+
error = error.replace(/^\s*/gm, ' ');
|
55
|
+
error = error.replace(/^\s+at .*?assets\/qunit\/qunit.*?\.js.*?$/mg, '');
|
56
|
+
error = error.replace(/\n+$/, '');
|
57
|
+
} else if (data.skipped) {
|
58
|
+
stats.pending += 1;
|
59
|
+
} else {
|
60
|
+
stats.passes += 1;
|
61
|
+
}
|
62
|
+
|
63
|
+
callPhantom({
|
64
|
+
name: 'test end',
|
65
|
+
title: data.name,
|
66
|
+
passed: data.failed === 0 && !data.skipped,
|
67
|
+
pending: data.skipped,
|
68
|
+
failure: error
|
69
|
+
});
|
70
|
+
});
|
71
|
+
|
72
|
+
QUnit.begin(function(data){
|
73
|
+
start = new Date().getTime();
|
74
|
+
});
|
75
|
+
|
76
|
+
QUnit.done(function(data){
|
77
|
+
stats.elapsed = new Date().getTime() - start;
|
78
|
+
|
79
|
+
callPhantom({
|
80
|
+
name: 'end',
|
81
|
+
stats: stats
|
82
|
+
});
|
83
|
+
});
|
84
|
+
})();
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#ember-testing-container {
|
2
|
+
position: absolute;
|
3
|
+
background: white;
|
4
|
+
width: 640px;
|
5
|
+
height: 384px;
|
6
|
+
overflow: auto;
|
7
|
+
z-index: 9999;
|
8
|
+
border: 1px solid #ccc;
|
9
|
+
right: 50px;
|
10
|
+
bottom: 50px;
|
11
|
+
padding: 5px;
|
12
|
+
}
|
13
|
+
|
14
|
+
#ember-testing {
|
15
|
+
zoom: 50%;
|
16
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>Ember: <%= TestSquad.app_class_name %></title>
|
6
|
+
<%= stylesheet_link_tag 'qunit', 'test_squad/ember' %>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id="qunit"></div>
|
10
|
+
<div id="qunit-fixture"></div>
|
11
|
+
<div id="ember-testing-container"><div id="ember-testing"></div></div>
|
12
|
+
<%= javascript_include_tag 'qunit', 'test_squad/qunit-phantom', 'test_helper' %>
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>Jasmine: <%= TestSquad.app_class_name %></title>
|
6
|
+
|
7
|
+
<%= favicon_link_tag 'jasmine/jasmine_favicon.png' %>
|
8
|
+
<%= stylesheet_link_tag 'jasmine/jasmine' %>
|
9
|
+
<%= javascript_include_tag 'jasmine/jasmine', 'jasmine/jasmine-html', 'test_squad/jasmine-phantom', 'jasmine/boot', 'spec_helper' %>
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body>
|
13
|
+
<div id="jasmine-fixture"></div>
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<meta charset="utf-8">
|
4
|
+
<title>Mocha: <%= TestSquad.app_class_name %></title>
|
5
|
+
<%= stylesheet_link_tag 'mocha' %>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<div id="mocha"></div>
|
9
|
+
<%= javascript_include_tag 'mocha', 'test_squad/mocha-reporter', 'spec_helper' %>
|
10
|
+
</body>
|
11
|
+
</html>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>QUnit: <%= TestSquad.app_class_name %></title>
|
6
|
+
<%= stylesheet_link_tag 'qunit' %>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id="qunit"></div>
|
10
|
+
<div id="qunit-fixture"></div>
|
11
|
+
<%= javascript_include_tag 'qunit', 'test_squad/qunit-phantom', 'test_helper' %>
|
12
|
+
</body>
|
13
|
+
</html>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
class TestSquad::InstallGenerator < Rails::Generators::Base
|
2
|
+
source_root File.expand_path('../templates', __FILE__)
|
3
|
+
|
4
|
+
class_option :framework,
|
5
|
+
type: 'string',
|
6
|
+
desc: 'Select the JavaScript framework. Can be jasmine, qunit, mocha or ember.',
|
7
|
+
aliases: '-f',
|
8
|
+
required: true
|
9
|
+
|
10
|
+
def generate
|
11
|
+
send "generate_#{options[:framework]}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def generate_defaults
|
15
|
+
add_source 'https://rails-assets.org'
|
16
|
+
empty_directory test_directory
|
17
|
+
template 'test_squad.rb.erb', "#{test_directory}/test_squad.rb"
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def test_directory
|
23
|
+
TestSquad.test_directory
|
24
|
+
end
|
25
|
+
|
26
|
+
def app_name
|
27
|
+
app_class_name.underscore
|
28
|
+
end
|
29
|
+
|
30
|
+
def app_class_name
|
31
|
+
TestSquad.app_class_name
|
32
|
+
end
|
33
|
+
|
34
|
+
def generate_qunit
|
35
|
+
empty_directory "#{test_directory}/#{app_name}"
|
36
|
+
create_file "#{test_directory}/#{app_name}/.keep"
|
37
|
+
template 'qunit/test_helper.js.erb', "#{test_directory}/test_helper.js"
|
38
|
+
copy_file 'qunit/answer_test.js', "#{test_directory}/#{app_name}/answer_test.js"
|
39
|
+
|
40
|
+
gem_group :development, :test do
|
41
|
+
gem 'rails-assets-qunit'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def generate_jasmine
|
46
|
+
empty_directory "#{test_directory}/#{app_name}"
|
47
|
+
create_file "#{test_directory}/#{app_name}/.keep"
|
48
|
+
template 'jasmine/spec_helper.js.erb', "#{test_directory}/spec_helper.js"
|
49
|
+
copy_file 'jasmine/answer_spec.js', "#{test_directory}/#{app_name}/answer_spec.js"
|
50
|
+
end
|
51
|
+
|
52
|
+
def generate_mocha
|
53
|
+
empty_directory "#{test_directory}/#{app_name}"
|
54
|
+
create_file "#{test_directory}/#{app_name}/.keep"
|
55
|
+
template 'mocha/spec_helper.js.erb', "#{test_directory}/spec_helper.js"
|
56
|
+
copy_file 'mocha/answer_spec.js', "#{test_directory}/#{app_name}/answer_spec.js"
|
57
|
+
|
58
|
+
gem_group :development, :test do
|
59
|
+
gem 'rails-assets-mocha'
|
60
|
+
gem 'rails-assets-expect'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def generate_ember
|
65
|
+
empty_directory "#{test_directory}/unit"
|
66
|
+
copy_file 'ember/router_test.js', "#{test_directory}/unit/router_test.js"
|
67
|
+
|
68
|
+
empty_directory "#{test_directory}/routes"
|
69
|
+
create_file "#{test_directory}/routes/.keep"
|
70
|
+
|
71
|
+
empty_directory "#{test_directory}/components"
|
72
|
+
create_file "#{test_directory}/components/.keep"
|
73
|
+
|
74
|
+
empty_directory "#{test_directory}/views"
|
75
|
+
create_file "#{test_directory}/views/.keep"
|
76
|
+
|
77
|
+
empty_directory "#{test_directory}/models"
|
78
|
+
create_file "#{test_directory}/models/.keep"
|
79
|
+
|
80
|
+
template 'ember/test_helper.js.erb', "#{test_directory}/test_helper.js"
|
81
|
+
|
82
|
+
gem_group :development, :test do
|
83
|
+
gem 'rails-assets-qunit'
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
//= require application
|
2
|
+
//= require_self
|
3
|
+
//= require_tree ./components
|
4
|
+
//= require_tree ./models
|
5
|
+
//= require_tree ./routes
|
6
|
+
//= require_tree ./unit
|
7
|
+
//= require_tree ./views
|
8
|
+
|
9
|
+
// Set the application.
|
10
|
+
App = <%= app_class_name %>;
|
11
|
+
|
12
|
+
// Set up Ember testing.
|
13
|
+
App.rootElement = '#ember-testing';
|
14
|
+
App.setupForTesting();
|
15
|
+
App.injectTestHelpers();
|
@@ -0,0 +1,12 @@
|
|
1
|
+
//= require application
|
2
|
+
//= require expect
|
3
|
+
//= require_self
|
4
|
+
//= require_tree ./<%= app_name %>
|
5
|
+
|
6
|
+
mocha.setup('bdd');
|
7
|
+
mocha.checkLeaks();
|
8
|
+
mocha.globals(['jQuery']);
|
9
|
+
mocha.reporter(mocha.TestSquad);
|
10
|
+
window.onload = function(){
|
11
|
+
mocha.run();
|
12
|
+
};
|
@@ -0,0 +1,39 @@
|
|
1
|
+
desc 'Run JavaScript tests'
|
2
|
+
task :test_squad do
|
3
|
+
ENV['RAILS_ENV'] = 'test'
|
4
|
+
ENV['RACK_ENV'] = 'test'
|
5
|
+
|
6
|
+
require './config/environment'
|
7
|
+
require 'stringio'
|
8
|
+
|
9
|
+
phantomjs_bin = ENV.fetch('PHANTOMJS_BIN', 'phantomjs')
|
10
|
+
port = ENV.fetch('PORT', 50000)
|
11
|
+
host = ENV.fetch('HOST', 'localhost')
|
12
|
+
path = ENV.fetch('TEST_PATH', '/tests')
|
13
|
+
timeout = ENV.fetch('TIMEOUT', '10')
|
14
|
+
log = ENV.fetch('LOG', 'false')
|
15
|
+
url = File.join("http://#{host}:#{port}", path)
|
16
|
+
logger = Logger.new(StringIO.new)
|
17
|
+
|
18
|
+
handler = Rack::Handler.pick(['puma', 'thin', 'webrick'])
|
19
|
+
|
20
|
+
Rails.configuration.logger = logger
|
21
|
+
|
22
|
+
thread = Thread.new {
|
23
|
+
handler.run Rails.application,
|
24
|
+
Port: port,
|
25
|
+
Host: host,
|
26
|
+
Logger: logger,
|
27
|
+
AccessLog: []
|
28
|
+
}
|
29
|
+
|
30
|
+
thread.abort_on_exception = true
|
31
|
+
|
32
|
+
system phantomjs_bin,
|
33
|
+
File.expand_path('../../../phantomjs/runner.js', __FILE__),
|
34
|
+
url,
|
35
|
+
timeout,
|
36
|
+
log
|
37
|
+
|
38
|
+
exit $?.exitstatus
|
39
|
+
end
|
data/lib/terminal.png
ADDED
Binary file
|
data/lib/test_squad.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_squad/engine'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module TestSquad
|
5
|
+
def self.configuration
|
6
|
+
@configuration ||= OpenStruct.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.configure(&block)
|
10
|
+
configuration.tap(&block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.app_class_name
|
14
|
+
Rails.application.class.name.split('::').first
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.test_directory
|
18
|
+
@test_directory ||= begin
|
19
|
+
if Rails.root.join('spec').exist?
|
20
|
+
'spec/javascript'
|
21
|
+
else
|
22
|
+
'test/javascript'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module TestSquad
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
initializer 'test_squad' do
|
4
|
+
next unless %w[development test].include?(Rails.env)
|
5
|
+
|
6
|
+
config = Rails.application.config
|
7
|
+
|
8
|
+
config.assets.paths += [
|
9
|
+
Rails.root.join(TestSquad.test_directory).to_s
|
10
|
+
]
|
11
|
+
|
12
|
+
config.assets.precompile += %W[
|
13
|
+
test_helper.js
|
14
|
+
spec_helper.js
|
15
|
+
|
16
|
+
test_squad/qunit-phantom.js
|
17
|
+
test_squad/jasmine-phantom.js
|
18
|
+
test_squad/mocha-phantom.js
|
19
|
+
test_squad/ember.css
|
20
|
+
test_squad/mocha-reporter.js
|
21
|
+
|
22
|
+
qunit.css
|
23
|
+
qunit.js
|
24
|
+
|
25
|
+
jasmine/jasmine_favicon.png
|
26
|
+
jasmine/jasmine.js
|
27
|
+
jasmine/jasmine.css
|
28
|
+
jasmine/jasmine-html.js
|
29
|
+
jasmine/boot.js
|
30
|
+
|
31
|
+
mocha.js
|
32
|
+
mocha.css
|
33
|
+
]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|