qlive-rspec 0.3.1 → 0.4.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/Gemfile +0 -1
- data/README.md +22 -19
- data/lib/qlive/matchers.rb +1 -1
- data/lib/qlive/runner.rb +10 -23
- data/lib/qlive-rspec/version.rb +1 -1
- data/lib/qlive-rspec.rb +0 -5
- data/qlive-rspec.gemspec +4 -4
- data/spec/dummy/Gemfile +14 -15
- data/spec/dummy/README.md +1 -0
- data/spec/dummy/spec/qunits/adding_todos/long_list_qlive.rb +14 -0
- data/spec/dummy/spec/qunits/adding_todos/short_list_qlive.rb +14 -0
- data/spec/dummy/spec/qunits/adding_todos/test-ajax-creation.js +1 -1
- data/spec/dummy/spec/qunits/qunit_support/qunit-logger.js +1 -1
- data/spec/dummy/spec/qunits/qunit_support/wait-for.js +2 -1
- data/spec/qunits_spec.rb +1 -0
- data/spec/spec_helper.rb +2 -1
- metadata +47 -20
- data/spec/dummy/spec/qunits/adding_todos/adding_todos_qlive.rb +0 -13
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -5,23 +5,22 @@ This builds on the [qlive-rails](https://github.com/proxv/qlive-rails) gem. If y
|
|
5
5
|
this gem will let you run your qlive tests in both a browser and headlessly as an rspec example/test.
|
6
6
|
|
7
7
|
|
8
|
-
|
9
|
-
If this doesn't work for you, it should be possible to incorporate your qlive tests into other automated testing
|
10
|
-
or continuous integration enviornments (eg, with a selenium-related library.)
|
8
|
+
## Installation
|
11
9
|
|
12
10
|
|
11
|
+
### PhantomJS and Poltergeist
|
13
12
|
|
14
|
-
|
13
|
+
Qlive-rspec depends on the [Poltergeist gem](https://github.com/jonleighton/poltergeist),
|
14
|
+
which uses [PhantomJS](http://phantomjs.org/) as its headless webkit browser.
|
15
15
|
|
16
16
|
|
17
|
+
You will need to install PhantomJS. Up-to-date binaries are usually available
|
18
|
+
for [download](http://phantomjs.org/download.html) so it is a pretty easy install.
|
17
19
|
|
18
|
-
* Install webkit-qt and xvfb on your system. Eg:
|
19
|
-
<pre>sudo aptitude install libqt4-dev xvfb</pre>
|
20
20
|
|
21
|
-
|
21
|
+
### Gemfile
|
22
22
|
|
23
|
-
|
24
|
-
* Add qlive-rails and qlive-rspec to your Gemfile as follows:
|
23
|
+
Add poltergeist, qlive-rails, and qlive-rspec to your Gemfile as follows:
|
25
24
|
|
26
25
|
```ruby
|
27
26
|
group :test, :development do
|
@@ -29,12 +28,16 @@ note: See [capybara-webkit](https://github.com/thoughtbot/capybara-webkit) and [
|
|
29
28
|
end
|
30
29
|
|
31
30
|
group :test do
|
32
|
-
gem '
|
33
|
-
gem 'qlive-rspec'
|
31
|
+
gem 'poltergeist', '~> 1.1'
|
32
|
+
gem 'qlive-rspec', '~> 0.4.0'
|
34
33
|
end
|
35
34
|
```
|
36
35
|
|
37
|
-
|
36
|
+
|
37
|
+
### Routes
|
38
|
+
|
39
|
+
Mount the engine in routes.rb:
|
40
|
+
|
38
41
|
|
39
42
|
```ruby
|
40
43
|
if Rails.env != 'production'
|
@@ -53,7 +56,7 @@ create ``spec/qunits/qunits_spec.rb``:
|
|
53
56
|
require "spec_helper.rb"
|
54
57
|
include Qlive::Runner
|
55
58
|
|
56
|
-
Capybara.current_driver = :
|
59
|
+
Capybara.current_driver = :poltergeist
|
57
60
|
|
58
61
|
describe "qunits" do
|
59
62
|
run_qlive
|
@@ -61,8 +64,12 @@ create ``spec/qunits/qunits_spec.rb``:
|
|
61
64
|
```
|
62
65
|
|
63
66
|
|
64
|
-
*
|
65
|
-
|
67
|
+
* Your qunit tests will now run as a normal rspec example:
|
68
|
+
``rspec spec/qunits``
|
69
|
+
|
70
|
+
|
71
|
+
* Tip: you can run just specific qlive suites using the rspec --example option and the qlive suite name. Eg: Running qunits for just the suite Posts::AsUserQlive could be run with:
|
72
|
+
``rspec spec/qunits --example 'posts/as_user'``
|
66
73
|
|
67
74
|
|
68
75
|
## Sauce
|
@@ -156,10 +163,6 @@ Qlive.setup[:before_suites] lambda { my_setup_code }
|
|
156
163
|
Qlive.setup[:after_suites] lambda { my_teardown_code }
|
157
164
|
</pre>
|
158
165
|
|
159
|
-
* Optionally set xvfb/headless gem to a custom configuration hash with: ``Qlive.setup[:headless_config] = my_settings_hash``
|
160
|
-
|
161
|
-
* Optionally disable xvfb with ``Qlive.setup[:start_xvfb] = false`` if you plan on configuring it externally
|
162
|
-
|
163
166
|
* Optionally change per-page timeout in seconds with: ``Qlive.setup[:capybara_wait_time] = 30``
|
164
167
|
|
165
168
|
* Optionally pass in ``:before_each`` and ``:after_each`` proc/lambda in ``run_qlive`` (called in qunits_spec.rb)
|
data/lib/qlive/matchers.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Qlive
|
2
2
|
module Matchers
|
3
3
|
def self.add_matchers
|
4
|
-
::RSpec::Matchers.define :pass_qunit_tests do |failure_text|
|
4
|
+
::RSpec::Matchers.define :pass_qunit_tests do |suite, failure_text|
|
5
5
|
match do |page_actual|
|
6
6
|
url = page_actual.current_url
|
7
7
|
passed = page_actual.find('#qunit-testresult .passed').text.to_i rescue 0
|
data/lib/qlive/runner.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'capybara/rspec'
|
2
|
-
require 'headless' # https://github.com/leonid-shevtsov/headless
|
3
2
|
require 'qlive/matchers'
|
4
3
|
require "#{Qlive::Engine.root}/app/helpers/qlive/suites_helper.rb"
|
5
4
|
|
6
|
-
|
7
5
|
module Qlive
|
8
6
|
module Runner
|
9
7
|
|
@@ -16,31 +14,26 @@ module Qlive
|
|
16
14
|
|
17
15
|
# todo: support suite selection by allowing directory and path names, not just suite names. (both absolute and relative to base_path)
|
18
16
|
desired_suites_by_name = args[:suites] || Qlive::Registry.find_suites.keys
|
19
|
-
describe "qlive", :type => :
|
17
|
+
describe "qlive", :type => :feature do
|
20
18
|
before(:all) do
|
21
19
|
Qlive.setup[:before_suites].call if Qlive.setup[:before_suites]
|
22
|
-
|
23
|
-
@headless = ::Headless.new(Qlive.setup[:headless_config])
|
24
|
-
@headless.start
|
25
|
-
end
|
26
|
-
end
|
20
|
+
end
|
27
21
|
|
28
|
-
desired_suites_by_name.
|
22
|
+
desired_suites_by_name.each_with_index do |desired_suite, ndx|
|
29
23
|
suite = resolve_suite(desired_suite)
|
30
24
|
raise "Could not find qlive suite for: #{desired_suite}" unless suite
|
31
|
-
|
25
|
+
|
26
|
+
describe "suite ##{ndx + 1} '#{suite.suite_name}'" do
|
32
27
|
extend Qlive::SuitesHelper
|
33
28
|
|
34
|
-
def visit_qunit_page(
|
29
|
+
def visit_qunit_page(suite, href)
|
35
30
|
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}"
|
31
|
+
Qlive.logger.info "Qlive sending capybara to run '#{suite.suite_name}' on #{href}"
|
37
32
|
visit href
|
38
33
|
page.html.should_not be_nil
|
39
|
-
page.
|
40
|
-
page.evaluate_script('!!window.qunitComplete')
|
41
|
-
end
|
34
|
+
page.find("#qlive-complete")
|
42
35
|
failure_text = page.evaluate_script("$('li.fail li.fail').text();")
|
43
|
-
page.should pass_qunit_tests(failure_text)
|
36
|
+
page.should pass_qunit_tests(suite, failure_text)
|
44
37
|
end
|
45
38
|
end
|
46
39
|
|
@@ -52,7 +45,7 @@ module Qlive
|
|
52
45
|
|
53
46
|
hrefs_for_suite(suite).each do |href|
|
54
47
|
it "should pass qunit tests when visiting: #{href}" do
|
55
|
-
visit_qunit_page(suite
|
48
|
+
visit_qunit_page(suite, href)
|
56
49
|
end
|
57
50
|
end
|
58
51
|
|
@@ -64,17 +57,11 @@ module Qlive
|
|
64
57
|
|
65
58
|
after(:all) do
|
66
59
|
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
|
70
|
-
end
|
71
60
|
end
|
72
|
-
|
73
61
|
end
|
74
62
|
end
|
75
63
|
|
76
64
|
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
65
|
Qlive::Registry.build_suite(desired_suite)
|
79
66
|
end
|
80
67
|
end
|
data/lib/qlive-rspec/version.rb
CHANGED
data/lib/qlive-rspec.rb
CHANGED
@@ -3,10 +3,5 @@ require "qlive/runner"
|
|
3
3
|
|
4
4
|
|
5
5
|
module QliveRspec
|
6
|
-
Qlive.setup[:start_xvfb] = true unless Qlive.setup.has_key?(:start_xvfb)
|
7
|
-
Qlive.setup[:headless_config] = {
|
8
|
-
:display => 99
|
9
|
-
# :destroy_at_exit => true, :reuse => false
|
10
|
-
}
|
11
6
|
Qlive.setup[:capybara_wait_time] = 30
|
12
7
|
end
|
data/qlive-rspec.gemspec
CHANGED
@@ -15,9 +15,9 @@ 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.
|
19
|
-
gem.add_dependency "rspec-rails", "~> 2.
|
20
|
-
gem.add_dependency "
|
21
|
-
gem.add_development_dependency "rspec-rails", "~> 2.
|
18
|
+
gem.add_dependency "qlive-rails", "~> 0.4.0"
|
19
|
+
gem.add_dependency "rspec-rails", "~> 2.11"
|
20
|
+
gem.add_dependency "poltergeist", "~> 1.1"
|
21
|
+
gem.add_development_dependency "rspec-rails", "~> 2.11"
|
22
22
|
gem.add_development_dependency "factory_girl_rails", "~> 3.5"
|
23
23
|
end
|
data/spec/dummy/Gemfile
CHANGED
@@ -1,31 +1,30 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'rails', '
|
4
|
-
gem 'sqlite3'
|
5
|
-
gem 'haml-rails'
|
3
|
+
gem 'rails', '3.2.12'
|
4
|
+
gem 'sqlite3', '1.3.7'
|
5
|
+
gem 'haml-rails', '0.3.4'
|
6
6
|
|
7
7
|
group :assets do
|
8
|
-
gem 'sass-rails',
|
9
|
-
gem 'coffee-rails', '
|
10
|
-
gem 'uglifier', '
|
8
|
+
gem 'sass-rails', '3.2.5'
|
9
|
+
gem 'coffee-rails', '3.2.2'
|
10
|
+
gem 'uglifier', '1.0.3'
|
11
11
|
end
|
12
12
|
|
13
|
-
gem 'jquery-rails'
|
14
|
-
gem 'backbone-on-rails'
|
13
|
+
gem 'jquery-rails', '2.0.2'
|
14
|
+
gem 'backbone-on-rails', '0.9.2.1'
|
15
15
|
|
16
16
|
group :development do
|
17
17
|
end
|
18
18
|
|
19
|
+
qlive_gems_path = File.expand_path('../../../..', __FILE__)
|
20
|
+
|
19
21
|
group :test, :development do
|
20
22
|
gem 'factory_girl_rails', '3.5.0'
|
21
|
-
gem 'qlive
|
22
|
-
|
23
|
+
gem 'qlive', :path => "#{qlive_gems_path}/qlive"
|
24
|
+
gem 'qlive-rails', :path => "#{qlive_gems_path}/qlive-rails", :require => 'qlive/engine'
|
23
25
|
end
|
24
26
|
|
25
27
|
group :test do
|
26
|
-
gem 'rspec-rails', '
|
27
|
-
gem '
|
28
|
-
gem 'headless', '~> 0.2'
|
29
|
-
gem 'qlive', :path => "#{ENV['PROXV_REPOS']}/qlive/gems/qlive" # tmp - del
|
30
|
-
gem 'qlive-rspec', :path => File.expand_path('../../..', __FILE__)
|
28
|
+
gem 'rspec-rails', '2.11.0'
|
29
|
+
gem 'poltergeist', '1.1.0'
|
31
30
|
end
|
data/spec/dummy/README.md
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
module AddingTodos
|
2
|
+
class ShortListQlive
|
3
|
+
include Qlive::Suite
|
4
|
+
|
5
|
+
def pages_to_test
|
6
|
+
[ '/#colors/blue', '/#colors/brown' ]
|
7
|
+
end
|
8
|
+
|
9
|
+
def before_each_suite(rack_request)
|
10
|
+
Todo.destroy(Todo.all.map(&:id))
|
11
|
+
4.times { FactoryGirl.create(:todo) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -2,7 +2,7 @@ $(document).ready(function() {
|
|
2
2
|
module("test-ajax-creation.js");
|
3
3
|
|
4
4
|
asyncTest("create new todo item", 2, function() {
|
5
|
-
waitFor('items load', function() {
|
5
|
+
waitFor('items to load', function() {
|
6
6
|
return $('#todo-list li').length > 3;
|
7
7
|
}).then(function() {
|
8
8
|
var startCount = $('#todo-list li').length;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
var DEFAULT_MAX_DURATION =
|
1
|
+
var DEFAULT_MAX_DURATION = 8000;
|
2
2
|
|
3
3
|
window.waitFor = function(title, checkFn, opts) {
|
4
4
|
var qunitCurrent = QUnit.config.current; // something is clearing this. Not yet sure why.
|
@@ -43,4 +43,5 @@ function failQunit(msg) {
|
|
43
43
|
ok(false, msg);
|
44
44
|
start();
|
45
45
|
window.qunitComplete = true;
|
46
|
+
window.endQlive && window.endQlive();
|
46
47
|
}
|
data/spec/qunits_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -2,6 +2,7 @@ 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 'capybara/poltergeist'
|
5
6
|
|
6
7
|
Dir["#{dummy_home}/spec/spec_support/**/*.rb"].each {|f| require f} # I don't care about Windows
|
7
8
|
|
@@ -9,5 +10,5 @@ RSpec.configure do |config|
|
|
9
10
|
config.use_transactional_fixtures = false
|
10
11
|
end
|
11
12
|
|
12
|
-
Capybara.default_driver = :
|
13
|
+
Capybara.default_driver = :poltergeist
|
13
14
|
|
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.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,55 +9,75 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: qlive-rails
|
16
|
-
requirement:
|
16
|
+
requirement: !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.4.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.4.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec-rails
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
31
36
|
- !ruby/object:Gem::Version
|
32
|
-
version: '2.
|
37
|
+
version: '2.11'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.11'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
47
|
+
name: poltergeist
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
42
52
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
53
|
+
version: '1.1'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.1'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rspec-rails
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
53
68
|
- !ruby/object:Gem::Version
|
54
|
-
version: '2.
|
69
|
+
version: '2.11'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.11'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: factory_girl_rails
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
@@ -65,7 +85,12 @@ dependencies:
|
|
65
85
|
version: '3.5'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '3.5'
|
69
94
|
description: Run qlive-rails qunit javascript tests headlessly alongside your normal
|
70
95
|
rspec integration examples
|
71
96
|
email:
|
@@ -145,7 +170,8 @@ files:
|
|
145
170
|
- spec/dummy/script/test
|
146
171
|
- spec/dummy/spec/factories/todo_lists.rb
|
147
172
|
- spec/dummy/spec/factories/todos.rb
|
148
|
-
- spec/dummy/spec/qunits/adding_todos/
|
173
|
+
- spec/dummy/spec/qunits/adding_todos/long_list_qlive.rb
|
174
|
+
- spec/dummy/spec/qunits/adding_todos/short_list_qlive.rb
|
149
175
|
- spec/dummy/spec/qunits/adding_todos/test-ajax-creation.js
|
150
176
|
- spec/dummy/spec/qunits/qunit_support/qunit-logger.js
|
151
177
|
- spec/dummy/spec/qunits/qunit_support/qunit-starter.js
|
@@ -177,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
203
|
version: '0'
|
178
204
|
requirements: []
|
179
205
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.8.
|
206
|
+
rubygems_version: 1.8.25
|
181
207
|
signing_key:
|
182
208
|
specification_version: 3
|
183
209
|
summary: Run qlive-rails qunit javascript tests headlessly alongside your normal rspec
|
@@ -243,7 +269,8 @@ test_files:
|
|
243
269
|
- spec/dummy/script/test
|
244
270
|
- spec/dummy/spec/factories/todo_lists.rb
|
245
271
|
- spec/dummy/spec/factories/todos.rb
|
246
|
-
- spec/dummy/spec/qunits/adding_todos/
|
272
|
+
- spec/dummy/spec/qunits/adding_todos/long_list_qlive.rb
|
273
|
+
- spec/dummy/spec/qunits/adding_todos/short_list_qlive.rb
|
247
274
|
- spec/dummy/spec/qunits/adding_todos/test-ajax-creation.js
|
248
275
|
- spec/dummy/spec/qunits/qunit_support/qunit-logger.js
|
249
276
|
- spec/dummy/spec/qunits/qunit_support/qunit-starter.js
|