qlive-rspec 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rakeTasks +7 -0
- data/README.md +95 -7
- data/lib/qlive-rspec/version.rb +1 -1
- data/lib/qlive/runner.rb +50 -38
- data/qlive-rspec.gemspec +2 -2
- data/spec/dummy/Gemfile +3 -1
- data/spec/dummy/README.md +1 -1
- data/spec/dummy/spec/qunits/adding_todos/adding_todos_qlive.rb +2 -2
- data/spec/dummy/spec/qunits/adding_todos/{ajax-creation.js → test-ajax-creation.js} +3 -3
- data/spec/dummy/spec/qunits/qunit_support/qunit-logger.js +14 -0
- data/spec/dummy/spec/qunits/qunit_support/wait-for.js +32 -14
- data/spec/dummy/spec/qunits/regressions/sparse_content/sparse_content_qlive.rb +14 -0
- data/spec/dummy/spec/qunits/regressions/sparse_content/test-empty-list.js +12 -0
- data/spec/qunits_spec.rb +4 -1
- data/spec/spec_helper.rb +0 -1
- metadata +25 -118
- data/spec/dummy/spec/qunits/.DS_Store +0 -0
- data/spec/dummy/spec/qunits/qunit_support/qlive_helper.rb +0 -0
data/.rakeTasks
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Settings><!--This file was automatically generated by Ruby plugin.
|
3
|
+
You are allowed to:
|
4
|
+
1. Remove rake task
|
5
|
+
2. Add existing rake tasks
|
6
|
+
To add existing rake tasks automatically delete this file and reload the project.
|
7
|
+
--><RakeGroup description="" fullCmd="" taksId="rake" /></Settings>
|
data/README.md
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
# Qlive-Rspec
|
2
2
|
|
3
3
|
Run qlive-rails qunit javascript tests headlessly alongside your normal rspec integration examples.
|
4
|
-
|
5
4
|
This builds on the [qlive-rails](https://github.com/proxv/qlive-rails) gem. If you are using Ruby on Rails and rspec,
|
6
5
|
this gem will let you run your qlive tests in both a browser and headlessly as an rspec example/test.
|
7
6
|
|
7
|
+
|
8
8
|
Qlive-rspec has relatively heavy dependencies: virtual X11 frame buffer, headless webkit, capybara, and rspec.
|
9
9
|
If this doesn't work for you, it should be possible to incorporate your qlive tests into other automated testing
|
10
10
|
or continuous integration enviornments (eg, with a selenium-related library.)
|
11
11
|
|
12
12
|
|
13
13
|
|
14
|
-
##
|
14
|
+
## Headless Webkit
|
15
|
+
|
16
|
+
|
15
17
|
|
16
18
|
* Install webkit-qt and xvfb on your system. Eg:
|
17
19
|
<pre>sudo aptitude install libqt4-dev xvfb</pre>
|
@@ -41,17 +43,16 @@ note: See [capybara-webkit](https://github.com/thoughtbot/capybara-webkit) and [
|
|
41
43
|
|
42
44
|
|
43
45
|
|
44
|
-
|
45
|
-
## Usage
|
46
|
-
|
47
46
|
### qunits_spec.rb
|
48
47
|
|
49
48
|
* After you have your [qlive suites](https://github.com/proxv/qlive/wiki/qlive-suites) working in a browser,
|
50
49
|
create ``spec/qunits/qunits_spec.rb``:
|
51
50
|
|
52
51
|
```ruby
|
53
|
-
require "spec_helper.rb"
|
52
|
+
require "spec_helper.rb"
|
54
53
|
include Qlive::Runner
|
54
|
+
|
55
|
+
Capybara.current_driver = :webkit
|
55
56
|
|
56
57
|
describe "qunits" do
|
57
58
|
run_qlive
|
@@ -63,7 +64,90 @@ create ``spec/qunits/qunits_spec.rb``:
|
|
63
64
|
<pre>rspec spec/qunits</pre>
|
64
65
|
|
65
66
|
|
66
|
-
|
67
|
+
## Sauce
|
68
|
+
|
69
|
+
You can use qlive-rspec to run cross-browser tests using Sauce Labs.
|
70
|
+
|
71
|
+
### Installation
|
72
|
+
|
73
|
+
* create account with Sauce Labs
|
74
|
+
* config/ondemand.yml with your password
|
75
|
+
* install java sdk
|
76
|
+
* add gem 'sauce' to Gemfile in :test group
|
77
|
+
|
78
|
+
### Sauce Labs Integration
|
79
|
+
|
80
|
+
* Create a spec outside of the normal spec directory. Eg:
|
81
|
+
|
82
|
+
sauce/sauce_spec.rb
|
83
|
+
|
84
|
+
* It might look like:
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
require_relative '../spec/spec_helper.rb'
|
88
|
+
require 'sauce'
|
89
|
+
require 'sauce/capybara'
|
90
|
+
|
91
|
+
Sauce.config do |c|
|
92
|
+
c[:start_tunnel] = true
|
93
|
+
end
|
94
|
+
|
95
|
+
Capybara.default_driver = :sauce
|
96
|
+
|
97
|
+
all_tests_passed = nil
|
98
|
+
Qlive.setup[:before_suites] = lambda {
|
99
|
+
Capybara.current_driver = :sauce
|
100
|
+
all_tests_passed = true
|
101
|
+
}
|
102
|
+
|
103
|
+
Qlive.setup[:after_suites] = lambda {
|
104
|
+
driver = Capybara.current_session.driver
|
105
|
+
session_id = driver.browser.session_id
|
106
|
+
driver.browser.quit
|
107
|
+
driver.instance_variable_set(:@browser, nil)
|
108
|
+
|
109
|
+
job = Sauce::Job.new('id' => session_id)
|
110
|
+
job.passed = all_tests_passed
|
111
|
+
job.save
|
112
|
+
}
|
113
|
+
|
114
|
+
def job_name(config=nil)
|
115
|
+
config ||= Sauce::Config.new.opts
|
116
|
+
"Qlive tests in #{config[:browser]}#{config[:browser_version] || ''} on #{config[:os]} at #{Time.now.to_s}"
|
117
|
+
end
|
118
|
+
|
119
|
+
def setup_session(config)
|
120
|
+
config.each do |key, value|
|
121
|
+
value = value || ''
|
122
|
+
ENV["SAUCE_#{key.to_s.upcase}"] = value.to_s
|
123
|
+
end
|
124
|
+
|
125
|
+
ENV['SAUCE_JOB_NAME'] ||= job_name(config)
|
126
|
+
end
|
127
|
+
|
128
|
+
def record_result(example)
|
129
|
+
all_tests_passed = false if example.exception
|
130
|
+
end
|
131
|
+
|
132
|
+
[[ 'firefox', nil, 'Windows 2003' ], [ 'iexplore', 8, 'Windows 2003' ], [ 'iexplore', 9, 'Windows 2008' ]].each do |browser, version, os|
|
133
|
+
config = {
|
134
|
+
:browser => browser,
|
135
|
+
:browser_version => version,
|
136
|
+
:os => os
|
137
|
+
}
|
138
|
+
describe job_name(config) do
|
139
|
+
run_qlive(:before_each => lambda {
|
140
|
+
setup_session(config)
|
141
|
+
puts "Running #{job_name}"
|
142
|
+
}, :after_each => lambda { |example|
|
143
|
+
record_result(example)
|
144
|
+
})
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
```
|
149
|
+
|
150
|
+
## Configuration Options
|
67
151
|
|
68
152
|
* Optionally run setup/teardown code before and after the qlive tests are run.
|
69
153
|
<pre>
|
@@ -76,3 +160,7 @@ Qlive.setup[:after_suites] lambda { my_teardown_code }
|
|
76
160
|
* Optionally disable xvfb with ``Qlive.setup[:start_xvfb] = false`` if you plan on configuring it externally
|
77
161
|
|
78
162
|
* Optionally change per-page timeout in seconds with: ``Qlive.setup[:capybara_wait_time] = 30``
|
163
|
+
|
164
|
+
* Optionally pass in ``:before_each`` and ``:after_each`` proc/lambda in ``run_qlive`` (called in qunits_spec.rb)
|
165
|
+
:after_each gets passed the current rspec [example](http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#example-instance_method) as its one and only parameter.
|
166
|
+
|
data/lib/qlive-rspec/version.rb
CHANGED
data/lib/qlive/runner.rb
CHANGED
@@ -9,65 +9,77 @@ module Qlive
|
|
9
9
|
|
10
10
|
module ClassMethods
|
11
11
|
|
12
|
-
def run_qlive(
|
13
|
-
puts "tmp --- run_qlive hi #{self.inspect}"
|
12
|
+
def run_qlive(args={})
|
14
13
|
Qlive::Matchers.add_matchers
|
15
|
-
|
16
14
|
Qlive.setup[:base_path] ||= "#{Rails.root}/spec/qunits"
|
17
15
|
Qlive.setup[:logger] ||= Rails.logger
|
18
|
-
Qlive::Registry.find_suites
|
19
|
-
|
20
|
-
describe "pages", :type => :request do
|
21
|
-
extend Qlive::SuitesHelper
|
22
|
-
|
23
|
-
def visit_qunit_page(suite_name, href)
|
24
|
-
using_wait_time(Qlive.setup[:capybara_wait_time]) do # perhaps let suites override this value
|
25
|
-
Qlive.logger.info "Qlive sending capybara to run '#{suite_name}' on #{href}"
|
26
|
-
visit href
|
27
|
-
page.html.should_not be_nil
|
28
|
-
page.wait_until(Qlive.setup[:capybara_wait_time]) do # hmmmm
|
29
|
-
page.evaluate_script('!!window.qunitComplete')
|
30
|
-
end
|
31
|
-
failure_text = page.evaluate_script("$('li.fail li.fail').text();")
|
32
|
-
page.should pass_qunit_tests(failure_text)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
Qlive::Registry.suites.values.each do |suite_meta|
|
37
|
-
load suite_meta[:path]
|
38
|
-
suite = Qlive::Registry.build_suite(suite_meta[:name])
|
39
|
-
hrefs_for_suite(suite).each do |href|
|
40
|
-
it "should pass qunit tests when visiting: #{href}" do
|
41
|
-
visit_qunit_page(suite.name, href)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
16
|
|
17
|
+
# todo: support suite selection by allowing directory and path names, not just suite names. (both absolute and relative to base_path)
|
18
|
+
desired_suites_by_name = args[:suites] || Qlive::Registry.find_suites.keys
|
19
|
+
describe "qlive", :type => :request do
|
46
20
|
before(:all) do
|
47
21
|
Qlive.setup[:before_suites].call if Qlive.setup[:before_suites]
|
48
|
-
if Qlive.setup[:start_xvfb]
|
22
|
+
if Qlive.setup[:start_xvfb] && Capybara.current_driver == :webkit
|
49
23
|
@headless = ::Headless.new(Qlive.setup[:headless_config])
|
50
24
|
@headless.start
|
51
25
|
end
|
52
26
|
end
|
53
27
|
|
54
|
-
|
55
|
-
|
28
|
+
desired_suites_by_name.each do |desired_suite|
|
29
|
+
suite = resolve_suite(desired_suite)
|
30
|
+
raise "Could not find qlive suite for: #{desired_suite}" unless suite
|
31
|
+
describe "suite '#{suite.name}'" do
|
32
|
+
extend Qlive::SuitesHelper
|
33
|
+
|
34
|
+
def visit_qunit_page(suite_name, href)
|
35
|
+
using_wait_time(Qlive.setup[:capybara_wait_time]) do # perhaps let individual suites override this value
|
36
|
+
Qlive.logger.info "Qlive sending capybara to run '#{suite_name}' on #{href}"
|
37
|
+
visit href
|
38
|
+
page.html.should_not be_nil
|
39
|
+
page.wait_until(Qlive.setup[:capybara_wait_time]) do # hmmmm
|
40
|
+
page.evaluate_script('!!window.qunitComplete')
|
41
|
+
end
|
42
|
+
failure_text = page.evaluate_script("$('li.fail li.fail').text();")
|
43
|
+
page.should pass_qunit_tests(failure_text)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
before(:each) do
|
49
|
+
args[:before_each].call if args[:before_each]
|
50
|
+
page.reset!
|
51
|
+
end
|
52
|
+
|
53
|
+
hrefs_for_suite(suite).each do |href|
|
54
|
+
it "should pass qunit tests when visiting: #{href}" do
|
55
|
+
visit_qunit_page(suite.name, href)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
after(:each) do
|
60
|
+
args[:after_each].call(example) if args[:after_each]
|
61
|
+
end
|
62
|
+
end
|
56
63
|
end
|
57
64
|
|
58
65
|
after(:all) do
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
66
|
+
Qlive.setup[:after_suites].call if Qlive.setup[:after_suites]
|
67
|
+
if @headless
|
68
|
+
puts "\nGetting rough with headless webkit_server. In the event of a fatal IO error, use your judgement regarding calling the police."
|
69
|
+
@headless.destroy
|
63
70
|
end
|
64
71
|
end
|
72
|
+
|
65
73
|
end
|
66
74
|
end
|
75
|
+
|
76
|
+
def resolve_suite(desired_suite)
|
77
|
+
#todo: if it ends in .rb, check for the file, and use the path to get the suite
|
78
|
+
Qlive::Registry.build_suite(desired_suite)
|
79
|
+
end
|
67
80
|
end
|
68
81
|
|
69
82
|
def self.included(base)
|
70
|
-
puts "tmp --- included. hi base #{base.inspect}"
|
71
83
|
base.extend ClassMethods
|
72
84
|
end
|
73
85
|
|
data/qlive-rspec.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.email = ["support@proxv.com"]
|
7
7
|
gem.summary = "Run qlive-rails qunit javascript tests headlessly alongside your normal rspec integration examples"
|
8
8
|
gem.description = gem.summary
|
9
|
-
gem.homepage = "https://github.com/proxv/qlive-rspec/"
|
9
|
+
gem.homepage = "https://github.com/proxv/qlive/gems/qlive-rspec/"
|
10
10
|
|
11
11
|
gem.files = `git ls-files`.split($\)
|
12
12
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = QliveRspec::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency "qlive-rails", "~> 0.
|
18
|
+
gem.add_dependency "qlive-rails", "~> 0.2.0"
|
19
19
|
gem.add_dependency "capybara-webkit", "0.10.0"
|
20
20
|
gem.add_dependency "rspec-rails", "~> 2.8.1"
|
21
21
|
gem.add_dependency "headless", "~> 0.3"
|
data/spec/dummy/Gemfile
CHANGED
@@ -18,12 +18,14 @@ end
|
|
18
18
|
|
19
19
|
group :test, :development do
|
20
20
|
gem 'factory_girl_rails', '3.5.0'
|
21
|
-
gem 'qlive-rails', :require => 'qlive/engine' # https://github.com/proxv/qlive
|
21
|
+
gem 'qlive-rails', :path => "#{ENV['PROXV_REPOS']}/qlive/gems/qlive-rails", :require => 'qlive/engine' # https://github.com/proxv/qlive # tmp - del
|
22
|
+
#gem 'qlive-rails', :require => 'qlive/engine' # https://github.com/proxv/qlive # tmp - restore
|
22
23
|
end
|
23
24
|
|
24
25
|
group :test do
|
25
26
|
gem 'rspec-rails', '~> 2.8.1'
|
26
27
|
gem 'capybara-webkit', '0.10.0'
|
27
28
|
gem 'headless', '~> 0.2'
|
29
|
+
gem 'qlive', :path => "#{ENV['PROXV_REPOS']}/qlive/gems/qlive" # tmp - del
|
28
30
|
gem 'qlive-rspec', :path => File.expand_path('../../..', __FILE__)
|
29
31
|
end
|
data/spec/dummy/README.md
CHANGED
@@ -2,12 +2,12 @@ class AddingTodosQlive
|
|
2
2
|
include Qlive::Suite
|
3
3
|
|
4
4
|
def pages_to_test
|
5
|
-
Todo.destroy(Todo.all.map(&:id))
|
6
|
-
4.times { FactoryGirl.create(:todo) }
|
7
5
|
[ '/#colors/blue', '/#colors/brown' ]
|
8
6
|
end
|
9
7
|
|
10
8
|
def before_each_request(rack_request)
|
9
|
+
Todo.destroy(Todo.all.map(&:id))
|
10
|
+
4.times { FactoryGirl.create(:todo) }
|
11
11
|
end
|
12
12
|
|
13
13
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
$(document).ready(function() {
|
2
|
-
module("ajax-creation.js");
|
2
|
+
module("test-ajax-creation.js");
|
3
3
|
|
4
|
-
|
4
|
+
asyncTest("create new todo item", 2, function() {
|
5
5
|
waitFor('items load', function() {
|
6
6
|
return $('#todo-list li').length > 3;
|
7
7
|
}).then(function() {
|
8
|
-
console.log('Finished fetching existing todo items');
|
9
8
|
var startCount = $('#todo-list li').length;
|
10
9
|
ok($('#todo-list li').length >= 4, "should start with at least 4 items");
|
11
10
|
var input = $('#new-todo');
|
12
11
|
var content = 'Water the dog again';
|
13
12
|
input.val(content).trigger(jQuery.Event('keypress', { keyCode: 13 } ));
|
14
13
|
equal($('#todo-list li').length, startCount + 1, "should add new item to the list");
|
14
|
+
start();
|
15
15
|
});
|
16
16
|
});
|
17
17
|
});
|
@@ -0,0 +1,14 @@
|
|
1
|
+
window.qlog = function(msg, obj) {
|
2
|
+
var domConsole = $('#qlog');
|
3
|
+
if (!domConsole.length) {
|
4
|
+
domConsole = $('<ol id="qlog">Test Log:</ol>').appendTo($('.qlive-structure'));
|
5
|
+
}
|
6
|
+
if (console && console.log) {
|
7
|
+
console.log(msg, obj);
|
8
|
+
}
|
9
|
+
var li = $('<li>' + msg + '</li>');
|
10
|
+
if (obj) {
|
11
|
+
li.append('<pre>' + JSON.stringify(obj, null, ' ') + '</pre>');
|
12
|
+
}
|
13
|
+
li.appendTo(domConsole);
|
14
|
+
};
|
@@ -1,28 +1,46 @@
|
|
1
|
-
|
2
|
-
var DEFAULT_MAX_DURATION = 9000;
|
3
|
-
|
4
|
-
// note: optionally disable ajax async to reduce the need for waitFor. eg:
|
5
|
-
// $.ajax({ async: false });
|
1
|
+
var DEFAULT_MAX_DURATION = 12000;
|
6
2
|
|
7
3
|
window.waitFor = function(title, checkFn, opts) {
|
8
|
-
|
4
|
+
var qunitCurrent = QUnit.config.current; // something is clearing this. Not yet sure why.
|
9
5
|
var defer = jQuery.Deferred();
|
10
6
|
opts = opts || {};
|
11
7
|
var startTime = new Date().getTime();
|
12
8
|
var maxDuration = opts.maxDuration || DEFAULT_MAX_DURATION;
|
13
9
|
var pollInterval = opts.pollInterval || 200;
|
14
10
|
var pollFn = function() {
|
15
|
-
|
16
|
-
|
11
|
+
var now = new Date().getTime();
|
12
|
+
if (now > startTime + maxDuration) {
|
13
|
+
qlog('qq.waitFor "' + title + '" did not complete in ' + maxDuration + ' ms');
|
14
|
+
QUnit.config.current = qunitCurrent;
|
17
15
|
defer.reject();
|
18
|
-
|
19
|
-
} else if (checkFn()) {
|
20
|
-
defer.resolve();
|
21
|
-
start();
|
16
|
+
failQunit('qq.waitFor "' + title + '" did not complete in ' + maxDuration + ' ms');
|
22
17
|
} else {
|
23
|
-
|
18
|
+
try {
|
19
|
+
var isReady = checkFn();
|
20
|
+
} catch (err) {
|
21
|
+
failQunit('ERROR. qq.waitFor "' + title + '" WAIT function has an error: ' + err.message);
|
22
|
+
}
|
23
|
+
if (isReady) {
|
24
|
+
QUnit.config.current = qunitCurrent;
|
25
|
+
qlog('Wait on "' + title + '" completed in ' + (now - startTime) + ' ms');
|
26
|
+
try {
|
27
|
+
defer.resolve();
|
28
|
+
} catch (err) {
|
29
|
+
failQunit('ERROR. qq.waitFor "' + title + '" RESOLUTION function has an error: ' + err.message);
|
30
|
+
}
|
31
|
+
} else {
|
32
|
+
window.setTimeout(pollFn, pollInterval);
|
33
|
+
}
|
24
34
|
}
|
25
35
|
};
|
36
|
+
qlog('Waiting for "' + title + '"');
|
26
37
|
pollFn();
|
27
38
|
return defer.promise();
|
28
|
-
};
|
39
|
+
};
|
40
|
+
|
41
|
+
function failQunit(msg) {
|
42
|
+
qlog(msg);
|
43
|
+
ok(false, msg);
|
44
|
+
start();
|
45
|
+
window.qunitComplete = true;
|
46
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
$(document).ready(function() {
|
2
|
+
module("test-empty-list.js");
|
3
|
+
|
4
|
+
asyncTest("regression test of empty list", 1, function() {
|
5
|
+
waitFor('items load', function() {
|
6
|
+
return $('#todo-list').length;
|
7
|
+
}).then(function() {
|
8
|
+
ok($('#create-todo input').length, 'new item input box should render when list is empty');
|
9
|
+
start();
|
10
|
+
});
|
11
|
+
});
|
12
|
+
});
|
data/spec/qunits_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -2,7 +2,6 @@ ENV["RAILS_ENV"] = 'test'
|
|
2
2
|
ENV["DUMMY_HOME"] = dummy_home = File.expand_path("../dummy", __FILE__)
|
3
3
|
require File.expand_path("#{dummy_home}/config/environment.rb", __FILE__)
|
4
4
|
require 'rspec/rails'
|
5
|
-
require 'pp'
|
6
5
|
|
7
6
|
Dir["#{dummy_home}/spec/spec_support/**/*.rb"].each {|f| require f} # I don't care about Windows
|
8
7
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qlive-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: qlive-rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152105900 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: 0.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152105900
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: capybara-webkit
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152105200 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.10.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152105200
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152129920 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.8.1
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152129920
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: headless
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152129080 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0.3'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152129080
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rspec-rails
|
60
|
-
requirement: &
|
60
|
+
requirement: &2152128520 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 2.8.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152128520
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: factory_girl_rails
|
71
|
-
requirement: &
|
71
|
+
requirement: &2152127640 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: 3.5.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152127640
|
80
80
|
description: Run qlive-rails qunit javascript tests headlessly alongside your normal
|
81
81
|
rspec integration examples
|
82
82
|
email:
|
@@ -86,6 +86,7 @@ extensions: []
|
|
86
86
|
extra_rdoc_files: []
|
87
87
|
files:
|
88
88
|
- .gitignore
|
89
|
+
- .rakeTasks
|
89
90
|
- Gemfile
|
90
91
|
- LICENSE
|
91
92
|
- README.md
|
@@ -139,11 +140,9 @@ files:
|
|
139
140
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
140
141
|
- spec/dummy/config/locales/en.yml
|
141
142
|
- spec/dummy/config/routes.rb
|
142
|
-
- spec/dummy/db/development.sqlite3
|
143
143
|
- spec/dummy/db/migrate/20120317122010_create_todos.rb
|
144
144
|
- spec/dummy/db/schema.rb
|
145
145
|
- spec/dummy/db/seeds.rb
|
146
|
-
- spec/dummy/db/test.sqlite3
|
147
146
|
- spec/dummy/doc/README_FOR_APP
|
148
147
|
- spec/dummy/lib/assets/.gitkeep
|
149
148
|
- spec/dummy/lib/tasks/.gitkeep
|
@@ -157,64 +156,19 @@ files:
|
|
157
156
|
- spec/dummy/script/test
|
158
157
|
- spec/dummy/spec/factories/todo_lists.rb
|
159
158
|
- spec/dummy/spec/factories/todos.rb
|
160
|
-
- spec/dummy/spec/qunits/.DS_Store
|
161
159
|
- spec/dummy/spec/qunits/adding_todos/adding_todos_qlive.rb
|
162
|
-
- spec/dummy/spec/qunits/adding_todos/ajax-creation.js
|
163
|
-
- spec/dummy/spec/qunits/qunit_support/
|
160
|
+
- spec/dummy/spec/qunits/adding_todos/test-ajax-creation.js
|
161
|
+
- spec/dummy/spec/qunits/qunit_support/qunit-logger.js
|
164
162
|
- spec/dummy/spec/qunits/qunit_support/qunit-starter.js
|
165
163
|
- spec/dummy/spec/qunits/qunit_support/wait-for.js
|
166
|
-
- spec/dummy/
|
167
|
-
- spec/dummy/
|
168
|
-
- spec/dummy/tmp/cache/assets/C9A/C40/sprockets%2F729f761526e6c21ed96511f7277fe982
|
169
|
-
- spec/dummy/tmp/cache/assets/C9F/9A0/sprockets%2F1db451c19d955625f00aa51437df3152
|
170
|
-
- spec/dummy/tmp/cache/assets/CA5/800/sprockets%2F353700484461b1229e7cfb7b7c0ce640
|
171
|
-
- spec/dummy/tmp/cache/assets/CAB/1F0/sprockets%2F5bc32b49750b54325270c34377ede81e
|
172
|
-
- spec/dummy/tmp/cache/assets/CAF/6B0/sprockets%2F2b7b92f831e2b43c590ca91b62708395
|
173
|
-
- spec/dummy/tmp/cache/assets/CBB/2E0/sprockets%2F9f57f2f115170a931f96bdb689312b94
|
174
|
-
- spec/dummy/tmp/cache/assets/CC1/EC0/sprockets%2Fe6256cd8969bf71b9e18729e631072a2
|
175
|
-
- spec/dummy/tmp/cache/assets/CD4/C30/sprockets%2Fd166012e1da02d12697c2ee0f574f690
|
176
|
-
- spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
|
177
|
-
- spec/dummy/tmp/cache/assets/CDC/F50/sprockets%2F614a5858458b9422d8e266fbaa6310ab
|
178
|
-
- spec/dummy/tmp/cache/assets/CDF/CB0/sprockets%2Fd6f984ec9cf105b484172a66c00f0561
|
179
|
-
- spec/dummy/tmp/cache/assets/CFF/170/sprockets%2F4af4a5f916847c198f92a79e8f04287f
|
180
|
-
- spec/dummy/tmp/cache/assets/D0D/830/sprockets%2F15213ba08baca38d909585e736bb9f44
|
181
|
-
- spec/dummy/tmp/cache/assets/D10/F10/sprockets%2F349a7d73940a1643fb3de693ca7cd244
|
182
|
-
- spec/dummy/tmp/cache/assets/D11/2F0/sprockets%2F36fc2e765d9cc09c50c0e55b1933a737
|
183
|
-
- spec/dummy/tmp/cache/assets/D26/620/sprockets%2F6926777d652a664ceb5aa28666efa7c9
|
184
|
-
- spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
|
185
|
-
- spec/dummy/tmp/cache/assets/D3E/F10/sprockets%2F75dd8ecd20427d22139517ae9f25ee2a
|
186
|
-
- spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
|
187
|
-
- spec/dummy/tmp/cache/assets/D4E/F70/sprockets%2Fcf5cf57efa2c53a409b80285278e5f77
|
188
|
-
- spec/dummy/tmp/cache/assets/D52/090/sprockets%2F826a9bb15e4093dd94d248d9f90f9ed2
|
189
|
-
- spec/dummy/tmp/cache/assets/D53/7D0/sprockets%2F43c0246147f6192dfffbf8f68d793a6e
|
190
|
-
- spec/dummy/tmp/cache/assets/D53/E30/sprockets%2Fffde997b0d35826e3175caa159968dc4
|
191
|
-
- spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
|
192
|
-
- spec/dummy/tmp/cache/assets/D5B/1B0/sprockets%2F36c7e9792a69fd67c686a16e382b5ffa
|
193
|
-
- spec/dummy/tmp/cache/assets/D68/7D0/sprockets%2Fde9b9f45d0b5fa19cf672371102a1f0f
|
194
|
-
- spec/dummy/tmp/cache/assets/D6F/C80/sprockets%2F69d138071bef8c9a34324bfdf2fd530d
|
195
|
-
- spec/dummy/tmp/cache/assets/D71/020/sprockets%2Fe303c90d58293dcd7eb29d633c9cb54a
|
196
|
-
- spec/dummy/tmp/cache/assets/D76/C40/sprockets%2F5dc3f2334568fee3c23c086463fefa8c
|
197
|
-
- spec/dummy/tmp/cache/assets/D82/AD0/sprockets%2F042cc68bc2ce132b356c704abfaf107a
|
198
|
-
- spec/dummy/tmp/cache/assets/D89/0B0/sprockets%2F7c8dc9875c0c22e89fdc595cdd9605f2
|
199
|
-
- spec/dummy/tmp/cache/assets/D8E/A00/sprockets%2Ff89d78b78be9a45cf7e944a57c82b26c
|
200
|
-
- spec/dummy/tmp/cache/assets/D90/690/sprockets%2Fce78782d3fc61622015a80c2acc6cdba
|
201
|
-
- spec/dummy/tmp/cache/assets/D99/330/sprockets%2Fe2a2a8724fee0fb701e358ee266cda62
|
202
|
-
- spec/dummy/tmp/cache/assets/D99/B80/sprockets%2Fc608b81fe3a10ffee85e0b63e9ca9201
|
203
|
-
- spec/dummy/tmp/cache/assets/DB0/B80/sprockets%2F96f6192adc54bf98a98d6fa190ebb74b
|
204
|
-
- spec/dummy/tmp/cache/assets/DC6/AD0/sprockets%2Fcfcccca451e28002deb96721d94e25ce
|
205
|
-
- spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
|
206
|
-
- spec/dummy/tmp/cache/assets/DE6/CE0/sprockets%2F6fda7e975c6df54bffda6598f431e5d1
|
207
|
-
- spec/dummy/tmp/cache/assets/DFD/350/sprockets%2Fdbea6b4a1f0b88258c29c6836bcca6ed
|
208
|
-
- spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
|
209
|
-
- spec/dummy/tmp/cache/assets/E39/3B0/sprockets%2F9ae1c4c883d1dd6fc84cdbf1ff55d44f
|
210
|
-
- spec/dummy/tmp/cache/sass/3a7aef2f892362e6596155ab72cedacbd9a1a7ed/todos.scssc
|
211
|
-
- spec/dummy/tmp/cache/sass/3ac4a8f3985b4a79a98fc03388b5ded5e9bdc4aa/todos.scssc
|
164
|
+
- spec/dummy/spec/qunits/regressions/sparse_content/sparse_content_qlive.rb
|
165
|
+
- spec/dummy/spec/qunits/regressions/sparse_content/test-empty-list.js
|
212
166
|
- spec/dummy/vendor/assets/javascripts/.gitkeep
|
213
167
|
- spec/dummy/vendor/assets/stylesheets/.gitkeep
|
214
168
|
- spec/dummy/vendor/plugins/.gitkeep
|
215
169
|
- spec/qunits_spec.rb
|
216
170
|
- spec/spec_helper.rb
|
217
|
-
homepage: https://github.com/proxv/qlive-rspec/
|
171
|
+
homepage: https://github.com/proxv/qlive/gems/qlive-rspec/
|
218
172
|
licenses: []
|
219
173
|
post_install_message:
|
220
174
|
rdoc_options: []
|
@@ -284,11 +238,9 @@ test_files:
|
|
284
238
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
285
239
|
- spec/dummy/config/locales/en.yml
|
286
240
|
- spec/dummy/config/routes.rb
|
287
|
-
- spec/dummy/db/development.sqlite3
|
288
241
|
- spec/dummy/db/migrate/20120317122010_create_todos.rb
|
289
242
|
- spec/dummy/db/schema.rb
|
290
243
|
- spec/dummy/db/seeds.rb
|
291
|
-
- spec/dummy/db/test.sqlite3
|
292
244
|
- spec/dummy/doc/README_FOR_APP
|
293
245
|
- spec/dummy/lib/assets/.gitkeep
|
294
246
|
- spec/dummy/lib/tasks/.gitkeep
|
@@ -302,58 +254,13 @@ test_files:
|
|
302
254
|
- spec/dummy/script/test
|
303
255
|
- spec/dummy/spec/factories/todo_lists.rb
|
304
256
|
- spec/dummy/spec/factories/todos.rb
|
305
|
-
- spec/dummy/spec/qunits/.DS_Store
|
306
257
|
- spec/dummy/spec/qunits/adding_todos/adding_todos_qlive.rb
|
307
|
-
- spec/dummy/spec/qunits/adding_todos/ajax-creation.js
|
308
|
-
- spec/dummy/spec/qunits/qunit_support/
|
258
|
+
- spec/dummy/spec/qunits/adding_todos/test-ajax-creation.js
|
259
|
+
- spec/dummy/spec/qunits/qunit_support/qunit-logger.js
|
309
260
|
- spec/dummy/spec/qunits/qunit_support/qunit-starter.js
|
310
261
|
- spec/dummy/spec/qunits/qunit_support/wait-for.js
|
311
|
-
- spec/dummy/
|
312
|
-
- spec/dummy/
|
313
|
-
- spec/dummy/tmp/cache/assets/C9A/C40/sprockets%2F729f761526e6c21ed96511f7277fe982
|
314
|
-
- spec/dummy/tmp/cache/assets/C9F/9A0/sprockets%2F1db451c19d955625f00aa51437df3152
|
315
|
-
- spec/dummy/tmp/cache/assets/CA5/800/sprockets%2F353700484461b1229e7cfb7b7c0ce640
|
316
|
-
- spec/dummy/tmp/cache/assets/CAB/1F0/sprockets%2F5bc32b49750b54325270c34377ede81e
|
317
|
-
- spec/dummy/tmp/cache/assets/CAF/6B0/sprockets%2F2b7b92f831e2b43c590ca91b62708395
|
318
|
-
- spec/dummy/tmp/cache/assets/CBB/2E0/sprockets%2F9f57f2f115170a931f96bdb689312b94
|
319
|
-
- spec/dummy/tmp/cache/assets/CC1/EC0/sprockets%2Fe6256cd8969bf71b9e18729e631072a2
|
320
|
-
- spec/dummy/tmp/cache/assets/CD4/C30/sprockets%2Fd166012e1da02d12697c2ee0f574f690
|
321
|
-
- spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
|
322
|
-
- spec/dummy/tmp/cache/assets/CDC/F50/sprockets%2F614a5858458b9422d8e266fbaa6310ab
|
323
|
-
- spec/dummy/tmp/cache/assets/CDF/CB0/sprockets%2Fd6f984ec9cf105b484172a66c00f0561
|
324
|
-
- spec/dummy/tmp/cache/assets/CFF/170/sprockets%2F4af4a5f916847c198f92a79e8f04287f
|
325
|
-
- spec/dummy/tmp/cache/assets/D0D/830/sprockets%2F15213ba08baca38d909585e736bb9f44
|
326
|
-
- spec/dummy/tmp/cache/assets/D10/F10/sprockets%2F349a7d73940a1643fb3de693ca7cd244
|
327
|
-
- spec/dummy/tmp/cache/assets/D11/2F0/sprockets%2F36fc2e765d9cc09c50c0e55b1933a737
|
328
|
-
- spec/dummy/tmp/cache/assets/D26/620/sprockets%2F6926777d652a664ceb5aa28666efa7c9
|
329
|
-
- spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
|
330
|
-
- spec/dummy/tmp/cache/assets/D3E/F10/sprockets%2F75dd8ecd20427d22139517ae9f25ee2a
|
331
|
-
- spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
|
332
|
-
- spec/dummy/tmp/cache/assets/D4E/F70/sprockets%2Fcf5cf57efa2c53a409b80285278e5f77
|
333
|
-
- spec/dummy/tmp/cache/assets/D52/090/sprockets%2F826a9bb15e4093dd94d248d9f90f9ed2
|
334
|
-
- spec/dummy/tmp/cache/assets/D53/7D0/sprockets%2F43c0246147f6192dfffbf8f68d793a6e
|
335
|
-
- spec/dummy/tmp/cache/assets/D53/E30/sprockets%2Fffde997b0d35826e3175caa159968dc4
|
336
|
-
- spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
|
337
|
-
- spec/dummy/tmp/cache/assets/D5B/1B0/sprockets%2F36c7e9792a69fd67c686a16e382b5ffa
|
338
|
-
- spec/dummy/tmp/cache/assets/D68/7D0/sprockets%2Fde9b9f45d0b5fa19cf672371102a1f0f
|
339
|
-
- spec/dummy/tmp/cache/assets/D6F/C80/sprockets%2F69d138071bef8c9a34324bfdf2fd530d
|
340
|
-
- spec/dummy/tmp/cache/assets/D71/020/sprockets%2Fe303c90d58293dcd7eb29d633c9cb54a
|
341
|
-
- spec/dummy/tmp/cache/assets/D76/C40/sprockets%2F5dc3f2334568fee3c23c086463fefa8c
|
342
|
-
- spec/dummy/tmp/cache/assets/D82/AD0/sprockets%2F042cc68bc2ce132b356c704abfaf107a
|
343
|
-
- spec/dummy/tmp/cache/assets/D89/0B0/sprockets%2F7c8dc9875c0c22e89fdc595cdd9605f2
|
344
|
-
- spec/dummy/tmp/cache/assets/D8E/A00/sprockets%2Ff89d78b78be9a45cf7e944a57c82b26c
|
345
|
-
- spec/dummy/tmp/cache/assets/D90/690/sprockets%2Fce78782d3fc61622015a80c2acc6cdba
|
346
|
-
- spec/dummy/tmp/cache/assets/D99/330/sprockets%2Fe2a2a8724fee0fb701e358ee266cda62
|
347
|
-
- spec/dummy/tmp/cache/assets/D99/B80/sprockets%2Fc608b81fe3a10ffee85e0b63e9ca9201
|
348
|
-
- spec/dummy/tmp/cache/assets/DB0/B80/sprockets%2F96f6192adc54bf98a98d6fa190ebb74b
|
349
|
-
- spec/dummy/tmp/cache/assets/DC6/AD0/sprockets%2Fcfcccca451e28002deb96721d94e25ce
|
350
|
-
- spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
|
351
|
-
- spec/dummy/tmp/cache/assets/DE6/CE0/sprockets%2F6fda7e975c6df54bffda6598f431e5d1
|
352
|
-
- spec/dummy/tmp/cache/assets/DFD/350/sprockets%2Fdbea6b4a1f0b88258c29c6836bcca6ed
|
353
|
-
- spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
|
354
|
-
- spec/dummy/tmp/cache/assets/E39/3B0/sprockets%2F9ae1c4c883d1dd6fc84cdbf1ff55d44f
|
355
|
-
- spec/dummy/tmp/cache/sass/3a7aef2f892362e6596155ab72cedacbd9a1a7ed/todos.scssc
|
356
|
-
- spec/dummy/tmp/cache/sass/3ac4a8f3985b4a79a98fc03388b5ded5e9bdc4aa/todos.scssc
|
262
|
+
- spec/dummy/spec/qunits/regressions/sparse_content/sparse_content_qlive.rb
|
263
|
+
- spec/dummy/spec/qunits/regressions/sparse_content/test-empty-list.js
|
357
264
|
- spec/dummy/vendor/assets/javascripts/.gitkeep
|
358
265
|
- spec/dummy/vendor/assets/stylesheets/.gitkeep
|
359
266
|
- spec/dummy/vendor/plugins/.gitkeep
|
Binary file
|
File without changes
|