qlive-rspec 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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