qlive-rspec 0.2.0 → 0.3.0
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/.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
|