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 CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in qlive-headless.gemspec
4
3
  gemspec
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
- Qlive-rspec has relatively heavy dependencies: virtual X11 frame buffer, headless webkit, capybara, and rspec.
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
- ## Headless Webkit
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
- note: See [capybara-webkit](https://github.com/thoughtbot/capybara-webkit) and [headless](https://github.com/leonid-shevtsov/headless) gems for more detailed instructions.
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 'capybara-webkit', '~> 0.10'
33
- gem 'qlive-rspec'
31
+ gem 'poltergeist', '~> 1.1'
32
+ gem 'qlive-rspec', '~> 0.4.0'
34
33
  end
35
34
  ```
36
35
 
37
- * As in qlive-rails, mount the engine in routes.rb:
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 = :webkit
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
- * It will now run as a normal rspec example:
65
- <pre>rspec spec/qunits</pre>
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)
@@ -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 => :request do
17
+ describe "qlive", :type => :feature do
20
18
  before(:all) do
21
19
  Qlive.setup[:before_suites].call if Qlive.setup[:before_suites]
22
- if Qlive.setup[:start_xvfb] && Capybara.current_driver == :webkit
23
- @headless = ::Headless.new(Qlive.setup[:headless_config])
24
- @headless.start
25
- end
26
- end
20
+ end
27
21
 
28
- desired_suites_by_name.each do |desired_suite|
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
- describe "suite '#{suite.name}'" do
25
+
26
+ describe "suite ##{ndx + 1} '#{suite.suite_name}'" do
32
27
  extend Qlive::SuitesHelper
33
28
 
34
- def visit_qunit_page(suite_name, href)
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.wait_until(Qlive.setup[:capybara_wait_time]) do # hmmmm
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.name, href)
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
@@ -1,3 +1,3 @@
1
1
  module QliveRspec
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
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.2.0"
19
- gem.add_dependency "rspec-rails", "~> 2.8"
20
- gem.add_dependency "headless", "~> 0.3"
21
- gem.add_development_dependency "rspec-rails", "~> 2.8"
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', '~> 3.2.3'
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', '~> 3.2.3'
9
- gem 'coffee-rails', '~> 3.2.1'
10
- gem 'uglifier', '>= 1.0.3'
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-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
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', '~> 2.8.1'
27
- gem 'capybara-webkit', '0.10.0'
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
@@ -14,6 +14,7 @@ http://localhost/qlive
14
14
 
15
15
  ## Run dummy app qlive suites headlessly
16
16
  ```
17
+ cd qlive/gems/qlive-rspec
17
18
  rspec spec/qunits
18
19
  ```
19
20
 
@@ -0,0 +1,14 @@
1
+ module AddingTodos
2
+ class LongListQlive
3
+ include Qlive::Suite
4
+
5
+ def pages_to_test
6
+ '/#colors/green'
7
+ end
8
+
9
+ def before_each_suite(rack_request)
10
+ Todo.destroy(Todo.all.map(&:id))
11
+ 20.times { FactoryGirl.create(:todo) }
12
+ end
13
+ end
14
+ end
@@ -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;
@@ -4,7 +4,7 @@ window.qlog = function(msg, obj) {
4
4
  domConsole = $('<ol id="qlog">Test Log:</ol>').appendTo($('.qlive-structure'));
5
5
  }
6
6
  if (console && console.log) {
7
- console.log(msg, obj);
7
+ console.log(msg, obj || '');
8
8
  }
9
9
  var li = $('<li>' + msg + '</li>');
10
10
  if (obj) {
@@ -1,4 +1,4 @@
1
- var DEFAULT_MAX_DURATION = 12000;
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
@@ -1,4 +1,5 @@
1
1
  require_relative './spec_helper.rb'
2
+ require_relative '../lib/qlive-rspec'
2
3
 
3
4
  include Qlive::Runner
4
5
 
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 = :webkit
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.3.1
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: 2012-09-08 00:00:00.000000000 Z
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: &2152318220 !ruby/object:Gem::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.2.0
21
+ version: 0.4.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152318220
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: &2152317560 !ruby/object:Gem::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.8'
37
+ version: '2.11'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *2152317560
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: headless
38
- requirement: &2152316820 !ruby/object:Gem::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: '0.3'
53
+ version: '1.1'
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *2152316820
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: &2152315960 !ruby/object:Gem::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.8'
69
+ version: '2.11'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *2152315960
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: &2152315200 !ruby/object:Gem::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: *2152315200
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/adding_todos_qlive.rb
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.10
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/adding_todos_qlive.rb
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
@@ -1,13 +0,0 @@
1
- class AddingTodosQlive
2
- include Qlive::Suite
3
-
4
- def pages_to_test
5
- [ '/#colors/blue', '/#colors/brown' ]
6
- end
7
-
8
- def before_each_request(rack_request)
9
- Todo.destroy(Todo.all.map(&:id))
10
- 4.times { FactoryGirl.create(:todo) }
11
- end
12
-
13
- end