jasmine-selenium-sauce 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. data/.travis.yml +4 -0
  2. data/README.md +34 -1
  3. data/lib/jasmine-selenium-sauce.rb +12 -4
  4. data/lib/jasmine-selenium-sauce/browser_config.rb +22 -0
  5. data/lib/jasmine-selenium-sauce/drivers.rb +4 -0
  6. data/lib/jasmine-selenium-sauce/drivers/selenium_browser_driver.rb +18 -0
  7. data/lib/jasmine-selenium-sauce/drivers/selenium_driver.rb +28 -0
  8. data/lib/jasmine-selenium-sauce/{selenium_saucelabs_driver.rb → drivers/selenium_saucelabs_driver.rb} +2 -16
  9. data/lib/jasmine-selenium-sauce/tasks/jasmine_selenium_sauce.rake +30 -0
  10. data/lib/jasmine-selenium-sauce/tasks/railtie.rb +1 -1
  11. data/lib/jasmine-selenium-sauce/tasks/rake_browser_runner.rb +22 -0
  12. data/lib/jasmine-selenium-sauce/tasks/{rake_runner.rb → rake_sauce_runner.rb} +9 -4
  13. data/lib/jasmine-selenium-sauce/version.rb +1 -1
  14. data/spec/fixtures/selenium_driver_fixtures.rb +42 -0
  15. data/spec/fixtures/vcr_cassettes/jasmine_browser_failures.yml +286 -0
  16. data/spec/fixtures/vcr_cassettes/jasmine_browser_success.yml +285 -0
  17. data/spec/fixtures/vcr_cassettes/{jasmine_failures.yml → jasmine_saucelabs_failures.yml} +0 -0
  18. data/spec/fixtures/vcr_cassettes/{jasmine_success.yml → jasmine_saucelabs_success.yml} +0 -0
  19. data/spec/jasmine-selenium-sauce/drivers/selenium_browser_driver_spec.rb +24 -0
  20. data/spec/jasmine-selenium-sauce/{selenium_saucelabs_driver_spec.rb → drivers/selenium_saucelabs_driver_spec.rb} +7 -45
  21. data/spec/jasmine-selenium-sauce_spec.rb +50 -4
  22. data/spec/spec_helper.rb +2 -2
  23. metadata +25 -17
  24. data/lib/jasmine-selenium-sauce/tasks/sauce.rake +0 -16
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.2"
4
+ - "1.9.3"
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ ## Build Status [<img src="https://secure.travis-ci.org/darend/jasmine-selenium-sauce.png"/>](http://travis-ci.org/darend/jasmine-selenium-sauce)
2
+
1
3
  # Jasmine::Sauce::Ci
2
4
 
3
5
  Uses SauceLabs to connect to your server and run your Jasmine suites, producing an RSpec report
@@ -16,7 +18,7 @@ Or install it yourself as:
16
18
 
17
19
  $ gem install jasmine-selenium-sauce
18
20
 
19
- ## Usage
21
+ ## Running Jasmine via SauceLabs
20
22
 
21
23
  rake jasmine:sauce
22
24
 
@@ -54,6 +56,37 @@ You can specify the format of the RSpec report with:
54
56
 
55
57
  See [sauce_config.rb](https://github.com/darend/jasmine-selenium-sauce/tree/master/lib/jasmine-selenium-sauce/sauce_config.rb)
56
58
 
59
+ ## Running Jasmine via local browser
60
+
61
+ rake jasmine:browser
62
+
63
+ ### Required Environment Variables
64
+
65
+ Requires the following environment variables to be set:
66
+
67
+ #### JASMINE_URL
68
+
69
+ Where your Jasmine tests are hosted:
70
+
71
+ JASMINE_URL=http://my.server.com/jasmine
72
+
73
+ #### LOCAL_BROWSER
74
+
75
+ Which browser that will be used to run your tests. Selenium may require a driver be installed depending the driver. See
76
+ the Selenium documentation for more details.
77
+
78
+ LOCAL_BROWSER=firefox
79
+
80
+ See [Which browsers does WebDriver support?](http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q:_Which_browsers_does_WebDriver_support?).
81
+
82
+ ### Optional Configuration
83
+
84
+ #### RSpec
85
+
86
+ You can specify the format of the RSpec report with:
87
+
88
+ JASMINE_SPEC_FORMAT=documentation
89
+
57
90
  ## Contributing
58
91
 
59
92
  1. Fork it
@@ -1,19 +1,27 @@
1
1
  require 'jasmine-selenium-sauce/version'
2
2
  require 'jasmine-selenium-sauce/jasmine_results'
3
3
  require 'jasmine-selenium-sauce/rspec_reporter'
4
+ require 'jasmine-selenium-sauce/browser_config'
4
5
  require 'jasmine-selenium-sauce/sauce_config'
5
6
  require 'jasmine-selenium-sauce/selenium_runner'
6
- require 'jasmine-selenium-sauce/selenium_saucelabs_driver'
7
+ require 'jasmine-selenium-sauce/drivers'
7
8
 
8
9
  module Jasmine
9
10
  module Sauce
10
11
  module CI
11
12
 
12
13
  class Main
13
- def self.run(config, reporter = RspecReporter.new)
14
- driver = SeleniumSauceLabsDriver.new(config)
14
+ def self.run_via_saucelabs(sauce_config, reporter = RspecReporter.new)
15
+ driver = SeleniumSauceLabsDriver.new(sauce_config)
15
16
  selenium_runner = SeleniumRunner.new(driver)
16
- results = selenium_runner.run(config.jasmine_server_url)
17
+ results = selenium_runner.run(sauce_config.jasmine_server_url)
18
+ reporter.report(results)
19
+ end
20
+
21
+ def self.run_via_browser(browser_config, reporter = RspecReporter.new)
22
+ driver = SeleniumBrowserDriver.new(browser_config.browser)
23
+ selenium_runner = SeleniumRunner.new(driver)
24
+ results = selenium_runner.run(browser_config.jasmine_server_url)
17
25
  reporter.report(results)
18
26
  end
19
27
  end
@@ -0,0 +1,22 @@
1
+ module Jasmine
2
+ module Sauce
3
+ module CI
4
+
5
+ class BrowserConfig
6
+
7
+ def validate
8
+ raise ArgumentError.new("JASMINE_URL was not set") unless jasmine_server_url
9
+ raise ArgumentError.new("LOCAL_BROWSER was not set") unless browser
10
+ end
11
+
12
+ def jasmine_server_url
13
+ ENV['JASMINE_URL']
14
+ end
15
+
16
+ def browser
17
+ ENV['LOCAL_BROWSER']
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,4 @@
1
+ require_relative 'drivers/selenium_driver'
2
+ require_relative 'drivers/selenium_saucelabs_driver'
3
+ require_relative 'drivers/selenium_browser_driver'
4
+
@@ -0,0 +1,18 @@
1
+ require_relative 'selenium_driver'
2
+
3
+ module Jasmine
4
+ module Sauce
5
+ module CI
6
+ class SeleniumBrowserDriver < SeleniumDriver
7
+
8
+ def initialize(browser)
9
+ super(create_driver(browser))
10
+ end
11
+
12
+ def create_driver(browser)
13
+ Selenium::WebDriver.for browser.to_sym
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ require 'selenium-webdriver'
2
+ require 'json'
3
+
4
+ module Jasmine
5
+ module Sauce
6
+ module CI
7
+ class SeleniumDriver
8
+
9
+ def initialize(driver)
10
+ @driver = driver
11
+ end
12
+
13
+ def connect(url)
14
+ @driver.navigate.to url
15
+ end
16
+
17
+ def disconnect
18
+ @driver.quit
19
+ end
20
+
21
+ def evaluate_js(script)
22
+ result = @driver.execute_script(script)
23
+ JSON.parse("{\"result\":#{result}}", :max_nesting => false)["result"]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,10 +1,9 @@
1
- require 'selenium-webdriver'
2
- require 'json'
1
+ require_relative 'selenium_driver'
3
2
 
4
3
  module Jasmine
5
4
  module Sauce
6
5
  module CI
7
- class SeleniumSauceLabsDriver
6
+ class SeleniumSauceLabsDriver < SeleniumDriver
8
7
 
9
8
  def initialize(sauce_config)
10
9
  @driver = create_driver(sauce_config)
@@ -21,19 +20,6 @@ module Jasmine
21
20
  Selenium::WebDriver.for :remote, options
22
21
  end
23
22
 
24
- def connect(url)
25
- @driver.navigate.to url
26
- end
27
-
28
- def disconnect
29
- @driver.quit
30
- end
31
-
32
- def evaluate_js(script)
33
- result = @driver.execute_script(script)
34
- JSON.parse("{\"result\":#{result}}", :max_nesting => false)["result"]
35
- end
36
-
37
23
  def generate_capabilities(sauce_config)
38
24
  {
39
25
  'platform' => sauce_config.platform,
@@ -0,0 +1,30 @@
1
+ namespace :jasmine do
2
+
3
+ desc "Run Jasmine via SauceLabs"
4
+ task :sauce do
5
+ require "rspec/core/rake_task"
6
+
7
+ RSpec::Core::RakeTask.new(:jasmine_sauce_runner) do |t|
8
+ t.rspec_opts = ["--colour", "--format", ENV['JASMINE_SPEC_FORMAT'] || "progress"]
9
+ t.verbose = true
10
+ runner_path = File.expand_path(File.join(File.dirname(__FILE__), "rake_sauce_runner.rb"))
11
+ t.pattern = [runner_path]
12
+ end
13
+
14
+ Rake::Task["jasmine_sauce_runner"].invoke
15
+ end
16
+
17
+ desc "Run Jasmine via local browser"
18
+ task :browser do
19
+ require "rspec/core/rake_task"
20
+
21
+ RSpec::Core::RakeTask.new(:jasmine_browser_runner) do |t|
22
+ t.rspec_opts = ["--colour", "--format", ENV['JASMINE_SPEC_FORMAT'] || "progress"]
23
+ t.verbose = true
24
+ runner_path = File.expand_path(File.join(File.dirname(__FILE__), "rake_browser_runner.rb"))
25
+ t.pattern = [runner_path]
26
+ end
27
+
28
+ Rake::Task["jasmine_browser_runner"].invoke
29
+ end
30
+ end
@@ -8,7 +8,7 @@ module Jasmine
8
8
  railtie_name :jasmine_sauce_ci
9
9
 
10
10
  rake_tasks do
11
- load "jasmine-selenium-sauce/tasks/sauce.rake"
11
+ load "jasmine-selenium-sauce/tasks/jasmine_selenium_sauce.rake"
12
12
  end
13
13
  end
14
14
 
@@ -0,0 +1,22 @@
1
+ require_relative '../../jasmine-selenium-sauce'
2
+
3
+ config = Jasmine::Sauce::CI::BrowserConfig.new
4
+ begin
5
+ config.validate
6
+ Jasmine::Sauce::CI::Main.run_via_browser(config)
7
+ rescue ArgumentError => e
8
+ STDERR << "\nError: #{e.message}\n\n"
9
+ STDERR << "The following environment variables are required:\n"
10
+ STDERR << "\n"
11
+ STDERR << " JASMINE_URL - Where your Jasmine tests are hosted (http://my.host.com:80/jasmine)\n"
12
+ STDERR << " LOCAL_BROWSER - Which browser to run "
13
+ STDERR << "(ie, internet_explorer, remote, chrome, firefox, ff, android, iphone, opera, safari)\n"
14
+ STDERR << "\n"
15
+ exit -1
16
+ rescue StandardError => e
17
+ STDERR << "\nError: #{e.message}\n\n"
18
+ if e.message.include?("jsApiReporter is not defined")
19
+ STDERR << "Unable to find Jasmine tests, ensure server is running and #{config.jasmine_server_url} is correct\n\n"
20
+ end
21
+ exit -1
22
+ end
@@ -1,17 +1,22 @@
1
1
  require_relative '../../jasmine-selenium-sauce'
2
- #require_relative '../../jasmine-selenium-sauce/sauce_config'
3
2
 
4
3
  begin
5
4
  config = Jasmine::Sauce::CI::SauceConfig.new
6
5
  config.validate
7
- Jasmine::Sauce::CI::Main.run(config)
6
+ Jasmine::Sauce::CI::Main.run_via_saucelabs(config)
8
7
  rescue ArgumentError => e
9
8
  STDERR << "\nError: #{e.message}\n\n"
10
9
  STDERR << "The following environment variables are required:\n"
11
10
  STDERR << "\n"
12
- STDERR << " SAUCELABS_URL - Your SauceLabs OnDemand URL with Basic Auth\n"
13
- STDERR << " JASMINE_URL - Where your Jasmine tests are hosted\n"
11
+ STDERR << " SAUCELABS_URL - Your SauceLabs OnDemand URL with Basic Auth (http://username:password@ondemand.saucelabs.com:80/wd/hub)\n"
12
+ STDERR << " JASMINE_URL - Where your Jasmine tests are hosted (http://my.host.com:80/jasmine)\n"
14
13
  STDERR << " SAUCE_BROWSER - Which Browser SauceLabs should use\n"
15
14
  STDERR << "\n"
16
15
  exit -1
16
+ rescue StandardError => e
17
+ STDERR << "\nError: #{e.message}\n\n"
18
+ if e.message.include?("jsApiReporter is not defined")
19
+ STDERR << "Unable to find Jasmine tests, ensure server is running and #{config.jasmine_server_url} is correct\n\n"
20
+ end
21
+ exit -1
17
22
  end
@@ -1,7 +1,7 @@
1
1
  module Jasmine
2
2
  module Sauce
3
3
  module Ci
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,42 @@
1
+
2
+ shared_examples_for "selenium driver" do
3
+ describe "#connect" do
4
+ let(:url) { "http://jasmine.server.url/jasmine" }
5
+ let(:navigator) { double("SeleniumNavigator") }
6
+ subject { under_test.connect(url) }
7
+ before do
8
+ driver.should_receive(:navigate).and_return(navigator)
9
+ navigator.should_receive(:to).with(url)
10
+ end
11
+
12
+ specify { expect { subject }.not_to raise_error }
13
+ end
14
+
15
+ describe "#disconnect" do
16
+ subject { under_test.disconnect }
17
+ before do
18
+ driver.should_receive(:quit)
19
+ end
20
+
21
+ specify { expect { subject }.not_to raise_error }
22
+ end
23
+
24
+ describe "#evaluate_js" do
25
+ let(:script) { "the javascript" }
26
+ subject { under_test.evaluate_js(script) }
27
+ before do
28
+ driver.should_receive(:execute_script).and_return(script_result)
29
+ end
30
+
31
+ context "when simple result" do
32
+ let(:script_result) { "true" }
33
+ it { should be_true }
34
+ end
35
+
36
+ context "when json result" do
37
+ include_context "suites sample"
38
+ let(:script_result) { suites.to_json }
39
+ it { should eq(JSON.parse(script_result)) }
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,286 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://127.0.0.1:7055/hub/session
6
+ body:
7
+ encoding: UTF-8
8
+ string: ! '{"desiredCapabilities":{"browserName":"firefox","version":"","platform":"ANY","javascriptEnabled":true,"cssSelectorsEnabled":true,"takesScreenshot":true,"nativeEvents":false,"rotatable":false}}'
9
+ headers:
10
+ accept:
11
+ - application/json
12
+ content-type:
13
+ - application/json; charset=utf-8
14
+ content-length:
15
+ - '193'
16
+ user-agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 303
21
+ message: See Other
22
+ headers:
23
+ location:
24
+ - http://127.0.0.1:7055/hub/session/b698ea37-e045-7245-bc43-ee08c944d356
25
+ connection:
26
+ - close
27
+ content-length:
28
+ - '0'
29
+ server:
30
+ - httpd.js
31
+ date:
32
+ - Sat, 29 Sep 2012 21:02:37 GMT
33
+ body:
34
+ encoding: US-ASCII
35
+ string: ''
36
+ http_version: '1.1'
37
+ recorded_at: Sat, 29 Sep 2012 21:02:37 GMT
38
+ - request:
39
+ method: get
40
+ uri: http://127.0.0.1:7055/hub/session/b698ea37-e045-7245-bc43-ee08c944d356
41
+ body:
42
+ encoding: US-ASCII
43
+ string: ''
44
+ headers:
45
+ accept:
46
+ - application/json
47
+ user-agent:
48
+ - Ruby
49
+ response:
50
+ status:
51
+ code: 200
52
+ message: OK
53
+ headers:
54
+ content-type:
55
+ - application/json; charset=UTF-8
56
+ connection:
57
+ - close
58
+ content-length:
59
+ - '283'
60
+ server:
61
+ - httpd.js
62
+ date:
63
+ - Sat, 29 Sep 2012 21:02:37 GMT
64
+ body:
65
+ encoding: US-ASCII
66
+ string: ! '{"name":"getSessionCapabilities","sessionId":"b698ea37-e045-7245-bc43-ee08c944d356","status":0,"value":{"cssSelectorsEnabled":true,"browserName":"firefox","handlesAlerts":true,"javascriptEnabled":true,"nativeEvents":false,"platform":"Darwin","takesScreenshot":true,"version":"15.0"}}'
67
+ http_version: '1.1'
68
+ recorded_at: Sat, 29 Sep 2012 21:02:37 GMT
69
+ - request:
70
+ method: post
71
+ uri: http://127.0.0.1:7055/hub/session/b698ea37-e045-7245-bc43-ee08c944d356/url
72
+ body:
73
+ encoding: UTF-8
74
+ string: ! '{"url":"http://localhost:3000/jasmine"}'
75
+ headers:
76
+ accept:
77
+ - application/json
78
+ content-type:
79
+ - application/json; charset=utf-8
80
+ content-length:
81
+ - '39'
82
+ user-agent:
83
+ - Ruby
84
+ response:
85
+ status:
86
+ code: 200
87
+ message: OK
88
+ headers:
89
+ content-type:
90
+ - application/json; charset=UTF-8
91
+ connection:
92
+ - close
93
+ content-length:
94
+ - '87'
95
+ server:
96
+ - httpd.js
97
+ date:
98
+ - Sat, 29 Sep 2012 21:02:38 GMT
99
+ body:
100
+ encoding: US-ASCII
101
+ string: ! '{"name":"get","sessionId":"b698ea37-e045-7245-bc43-ee08c944d356","status":0,"value":""}'
102
+ http_version: '1.1'
103
+ recorded_at: Sat, 29 Sep 2012 21:02:38 GMT
104
+ - request:
105
+ method: post
106
+ uri: http://127.0.0.1:7055/hub/session/b698ea37-e045-7245-bc43-ee08c944d356/execute
107
+ body:
108
+ encoding: UTF-8
109
+ string: ! '{"script":"return jsApiReporter && jsApiReporter.started","args":[]}'
110
+ headers:
111
+ accept:
112
+ - application/json
113
+ content-type:
114
+ - application/json; charset=utf-8
115
+ content-length:
116
+ - '68'
117
+ user-agent:
118
+ - Ruby
119
+ response:
120
+ status:
121
+ code: 200
122
+ message: OK
123
+ headers:
124
+ content-type:
125
+ - application/json; charset=UTF-8
126
+ connection:
127
+ - close
128
+ content-length:
129
+ - '99'
130
+ server:
131
+ - httpd.js
132
+ date:
133
+ - Sat, 29 Sep 2012 21:02:38 GMT
134
+ body:
135
+ encoding: US-ASCII
136
+ string: ! '{"name":"executeScript","sessionId":"b698ea37-e045-7245-bc43-ee08c944d356","status":0,"value":true}'
137
+ http_version: '1.1'
138
+ recorded_at: Sat, 29 Sep 2012 21:02:38 GMT
139
+ - request:
140
+ method: post
141
+ uri: http://127.0.0.1:7055/hub/session/b698ea37-e045-7245-bc43-ee08c944d356/execute
142
+ body:
143
+ encoding: UTF-8
144
+ string: ! '{"script":"var result = jsApiReporter.suites(); if (window.Prototype
145
+ && Object.toJSON) { return Object.toJSON(result) } else { return JSON.stringify(result)
146
+ }","args":[]}'
147
+ headers:
148
+ accept:
149
+ - application/json
150
+ content-type:
151
+ - application/json; charset=utf-8
152
+ content-length:
153
+ - '170'
154
+ user-agent:
155
+ - Ruby
156
+ response:
157
+ status:
158
+ code: 200
159
+ message: OK
160
+ headers:
161
+ content-type:
162
+ - application/json; charset=UTF-8
163
+ connection:
164
+ - close
165
+ content-length:
166
+ - '735'
167
+ server:
168
+ - httpd.js
169
+ date:
170
+ - Sat, 29 Sep 2012 21:02:38 GMT
171
+ body:
172
+ encoding: US-ASCII
173
+ string: ! '{"name":"executeScript","sessionId":"b698ea37-e045-7245-bc43-ee08c944d356","status":0,"value":"[{\"id\":0,\"name\":\"Document
174
+ Model\",\"type\":\"suite\",\"children\":[{\"id\":1,\"name\":\"URL\",\"type\":\"suite\",\"children\":[{\"id\":0,\"name\":\"when
175
+ new\",\"type\":\"spec\",\"children\":[]},{\"id\":1,\"name\":\"when is not
176
+ new\",\"type\":\"spec\",\"children\":[]}]}]},{\"id\":2,\"name\":\"Documents
177
+ Router\",\"type\":\"suite\",\"children\":[{\"id\":3,\"name\":\"routes\",\"type\":\"suite\",\"children\":[{\"id\":2,\"name\":\"fires
178
+ index on blank hash\",\"type\":\"spec\",\"children\":[]},{\"id\":3,\"name\":\"fires
179
+ new\",\"type\":\"spec\",\"children\":[]},{\"id\":4,\"name\":\"fires edit\",\"type\":\"spec\",\"children\":[]}]}]}]"}'
180
+ http_version: '1.1'
181
+ recorded_at: Sat, 29 Sep 2012 21:02:38 GMT
182
+ - request:
183
+ method: post
184
+ uri: http://127.0.0.1:7055/hub/session/b698ea37-e045-7245-bc43-ee08c944d356/execute
185
+ body:
186
+ encoding: UTF-8
187
+ string: ! '{"script":"return jsApiReporter.finished","args":[]}'
188
+ headers:
189
+ accept:
190
+ - application/json
191
+ content-type:
192
+ - application/json; charset=utf-8
193
+ content-length:
194
+ - '52'
195
+ user-agent:
196
+ - Ruby
197
+ response:
198
+ status:
199
+ code: 200
200
+ message: OK
201
+ headers:
202
+ content-type:
203
+ - application/json; charset=UTF-8
204
+ connection:
205
+ - close
206
+ content-length:
207
+ - '99'
208
+ server:
209
+ - httpd.js
210
+ date:
211
+ - Sat, 29 Sep 2012 21:02:38 GMT
212
+ body:
213
+ encoding: US-ASCII
214
+ string: ! '{"name":"executeScript","sessionId":"b698ea37-e045-7245-bc43-ee08c944d356","status":0,"value":true}'
215
+ http_version: '1.1'
216
+ recorded_at: Sat, 29 Sep 2012 21:02:38 GMT
217
+ - request:
218
+ method: post
219
+ uri: http://127.0.0.1:7055/hub/session/b698ea37-e045-7245-bc43-ee08c944d356/execute
220
+ body:
221
+ encoding: UTF-8
222
+ string: ! '{"script":"var result = jsApiReporter.resultsForSpecs([0,1,2,3,4]);
223
+ if (window.Prototype && Object.toJSON) { return Object.toJSON(result) } else
224
+ { return JSON.stringify(result) }","args":[]}'
225
+ headers:
226
+ accept:
227
+ - application/json
228
+ content-type:
229
+ - application/json; charset=utf-8
230
+ content-length:
231
+ - '190'
232
+ user-agent:
233
+ - Ruby
234
+ response:
235
+ status:
236
+ code: 200
237
+ message: OK
238
+ headers:
239
+ content-type:
240
+ - application/json; charset=UTF-8
241
+ connection:
242
+ - close
243
+ content-length:
244
+ - '1555'
245
+ server:
246
+ - httpd.js
247
+ date:
248
+ - Sat, 29 Sep 2012 21:02:38 GMT
249
+ body:
250
+ encoding: US-ASCII
251
+ string: ! '{"name":"executeScript","sessionId":"b698ea37-e045-7245-bc43-ee08c944d356","status":0,"value":"{\"0\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]},\"1\":{\"result\":\"failed\",\"messages\":[{\"passed\":false,\"type\":\"expect\",\"message\":\"Expected
252
+ ''documents/1'' to equal ''documents/2''.\",\"trace\":{\"stack\":\"@http://localhost:3000/assets/jasmine.js?body=1:102\\n@http://localhost:3000/assets/jasmine.js?body=1:1171\\n@http://localhost:3000/assets/app/models/document_spec.js?body=1:13\\n@http://localhost:3000/assets/jasmine.js?body=1:996\\n@http://localhost:3000/assets/jasmine.js?body=1:1785\\n@http://localhost:3000/assets/jasmine.js?body=1:1738\\n@http://localhost:3000/assets/jasmine.js?body=1:2065\\n@http://localhost:3000/assets/jasmine.js?body=1:1785\\n@http://localhost:3000/assets/jasmine.js?body=1:1781\\n@http://localhost:3000/assets/jasmine.js?body=1:2039\\n@http://localhost:3000/assets/jasmine.js?body=1:2066\\n@http://localhost:3000/assets/jasmine.js?body=1:1795\\n@http://localhost:3000/assets/jasmine.js?body=1:1775\\n\"}}]},\"2\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]},\"3\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]},\"4\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}},{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]}}"}'
253
+ http_version: '1.1'
254
+ recorded_at: Sat, 29 Sep 2012 21:02:38 GMT
255
+ - request:
256
+ method: delete
257
+ uri: http://127.0.0.1:7055/hub/session/b698ea37-e045-7245-bc43-ee08c944d356
258
+ body:
259
+ encoding: US-ASCII
260
+ string: ''
261
+ headers:
262
+ accept:
263
+ - application/json
264
+ user-agent:
265
+ - Ruby
266
+ response:
267
+ status:
268
+ code: 200
269
+ message: OK
270
+ headers:
271
+ content-type:
272
+ - application/json; charset=UTF-8
273
+ connection:
274
+ - close
275
+ content-length:
276
+ - '88'
277
+ server:
278
+ - httpd.js
279
+ date:
280
+ - Sat, 29 Sep 2012 21:02:38 GMT
281
+ body:
282
+ encoding: US-ASCII
283
+ string: ! '{"name":"quit","sessionId":"b698ea37-e045-7245-bc43-ee08c944d356","status":0,"value":""}'
284
+ http_version: '1.1'
285
+ recorded_at: Sat, 29 Sep 2012 21:02:38 GMT
286
+ recorded_with: VCR 2.2.5
@@ -0,0 +1,285 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://127.0.0.1:7057/hub/session
6
+ body:
7
+ encoding: UTF-8
8
+ string: ! '{"desiredCapabilities":{"browserName":"firefox","version":"","platform":"ANY","javascriptEnabled":true,"cssSelectorsEnabled":true,"takesScreenshot":true,"nativeEvents":false,"rotatable":false}}'
9
+ headers:
10
+ accept:
11
+ - application/json
12
+ content-type:
13
+ - application/json; charset=utf-8
14
+ content-length:
15
+ - '193'
16
+ user-agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 303
21
+ message: See Other
22
+ headers:
23
+ location:
24
+ - http://127.0.0.1:7057/hub/session/0b88b0cf-2e6c-1d43-809f-00d96f249417
25
+ connection:
26
+ - close
27
+ content-length:
28
+ - '0'
29
+ server:
30
+ - httpd.js
31
+ date:
32
+ - Sat, 29 Sep 2012 21:00:30 GMT
33
+ body:
34
+ encoding: US-ASCII
35
+ string: ''
36
+ http_version: '1.1'
37
+ recorded_at: Sat, 29 Sep 2012 21:00:30 GMT
38
+ - request:
39
+ method: get
40
+ uri: http://127.0.0.1:7057/hub/session/0b88b0cf-2e6c-1d43-809f-00d96f249417
41
+ body:
42
+ encoding: US-ASCII
43
+ string: ''
44
+ headers:
45
+ accept:
46
+ - application/json
47
+ user-agent:
48
+ - Ruby
49
+ response:
50
+ status:
51
+ code: 200
52
+ message: OK
53
+ headers:
54
+ content-type:
55
+ - application/json; charset=UTF-8
56
+ connection:
57
+ - close
58
+ content-length:
59
+ - '283'
60
+ server:
61
+ - httpd.js
62
+ date:
63
+ - Sat, 29 Sep 2012 21:00:30 GMT
64
+ body:
65
+ encoding: US-ASCII
66
+ string: ! '{"name":"getSessionCapabilities","sessionId":"0b88b0cf-2e6c-1d43-809f-00d96f249417","status":0,"value":{"cssSelectorsEnabled":true,"browserName":"firefox","handlesAlerts":true,"javascriptEnabled":true,"nativeEvents":false,"platform":"Darwin","takesScreenshot":true,"version":"15.0"}}'
67
+ http_version: '1.1'
68
+ recorded_at: Sat, 29 Sep 2012 21:00:30 GMT
69
+ - request:
70
+ method: post
71
+ uri: http://127.0.0.1:7057/hub/session/0b88b0cf-2e6c-1d43-809f-00d96f249417/url
72
+ body:
73
+ encoding: UTF-8
74
+ string: ! '{"url":"http://localhost:3000/jasmine"}'
75
+ headers:
76
+ accept:
77
+ - application/json
78
+ content-type:
79
+ - application/json; charset=utf-8
80
+ content-length:
81
+ - '39'
82
+ user-agent:
83
+ - Ruby
84
+ response:
85
+ status:
86
+ code: 200
87
+ message: OK
88
+ headers:
89
+ content-type:
90
+ - application/json; charset=UTF-8
91
+ connection:
92
+ - close
93
+ content-length:
94
+ - '87'
95
+ server:
96
+ - httpd.js
97
+ date:
98
+ - Sat, 29 Sep 2012 21:00:30 GMT
99
+ body:
100
+ encoding: US-ASCII
101
+ string: ! '{"name":"get","sessionId":"0b88b0cf-2e6c-1d43-809f-00d96f249417","status":0,"value":""}'
102
+ http_version: '1.1'
103
+ recorded_at: Sat, 29 Sep 2012 21:00:30 GMT
104
+ - request:
105
+ method: post
106
+ uri: http://127.0.0.1:7057/hub/session/0b88b0cf-2e6c-1d43-809f-00d96f249417/execute
107
+ body:
108
+ encoding: UTF-8
109
+ string: ! '{"script":"return jsApiReporter && jsApiReporter.started","args":[]}'
110
+ headers:
111
+ accept:
112
+ - application/json
113
+ content-type:
114
+ - application/json; charset=utf-8
115
+ content-length:
116
+ - '68'
117
+ user-agent:
118
+ - Ruby
119
+ response:
120
+ status:
121
+ code: 200
122
+ message: OK
123
+ headers:
124
+ content-type:
125
+ - application/json; charset=UTF-8
126
+ connection:
127
+ - close
128
+ content-length:
129
+ - '99'
130
+ server:
131
+ - httpd.js
132
+ date:
133
+ - Sat, 29 Sep 2012 21:00:30 GMT
134
+ body:
135
+ encoding: US-ASCII
136
+ string: ! '{"name":"executeScript","sessionId":"0b88b0cf-2e6c-1d43-809f-00d96f249417","status":0,"value":true}'
137
+ http_version: '1.1'
138
+ recorded_at: Sat, 29 Sep 2012 21:00:30 GMT
139
+ - request:
140
+ method: post
141
+ uri: http://127.0.0.1:7057/hub/session/0b88b0cf-2e6c-1d43-809f-00d96f249417/execute
142
+ body:
143
+ encoding: UTF-8
144
+ string: ! '{"script":"var result = jsApiReporter.suites(); if (window.Prototype
145
+ && Object.toJSON) { return Object.toJSON(result) } else { return JSON.stringify(result)
146
+ }","args":[]}'
147
+ headers:
148
+ accept:
149
+ - application/json
150
+ content-type:
151
+ - application/json; charset=utf-8
152
+ content-length:
153
+ - '170'
154
+ user-agent:
155
+ - Ruby
156
+ response:
157
+ status:
158
+ code: 200
159
+ message: OK
160
+ headers:
161
+ content-type:
162
+ - application/json; charset=UTF-8
163
+ connection:
164
+ - close
165
+ content-length:
166
+ - '735'
167
+ server:
168
+ - httpd.js
169
+ date:
170
+ - Sat, 29 Sep 2012 21:00:30 GMT
171
+ body:
172
+ encoding: US-ASCII
173
+ string: ! '{"name":"executeScript","sessionId":"0b88b0cf-2e6c-1d43-809f-00d96f249417","status":0,"value":"[{\"id\":0,\"name\":\"Document
174
+ Model\",\"type\":\"suite\",\"children\":[{\"id\":1,\"name\":\"URL\",\"type\":\"suite\",\"children\":[{\"id\":0,\"name\":\"when
175
+ new\",\"type\":\"spec\",\"children\":[]},{\"id\":1,\"name\":\"when is not
176
+ new\",\"type\":\"spec\",\"children\":[]}]}]},{\"id\":2,\"name\":\"Documents
177
+ Router\",\"type\":\"suite\",\"children\":[{\"id\":3,\"name\":\"routes\",\"type\":\"suite\",\"children\":[{\"id\":2,\"name\":\"fires
178
+ index on blank hash\",\"type\":\"spec\",\"children\":[]},{\"id\":3,\"name\":\"fires
179
+ new\",\"type\":\"spec\",\"children\":[]},{\"id\":4,\"name\":\"fires edit\",\"type\":\"spec\",\"children\":[]}]}]}]"}'
180
+ http_version: '1.1'
181
+ recorded_at: Sat, 29 Sep 2012 21:00:30 GMT
182
+ - request:
183
+ method: post
184
+ uri: http://127.0.0.1:7057/hub/session/0b88b0cf-2e6c-1d43-809f-00d96f249417/execute
185
+ body:
186
+ encoding: UTF-8
187
+ string: ! '{"script":"return jsApiReporter.finished","args":[]}'
188
+ headers:
189
+ accept:
190
+ - application/json
191
+ content-type:
192
+ - application/json; charset=utf-8
193
+ content-length:
194
+ - '52'
195
+ user-agent:
196
+ - Ruby
197
+ response:
198
+ status:
199
+ code: 200
200
+ message: OK
201
+ headers:
202
+ content-type:
203
+ - application/json; charset=UTF-8
204
+ connection:
205
+ - close
206
+ content-length:
207
+ - '99'
208
+ server:
209
+ - httpd.js
210
+ date:
211
+ - Sat, 29 Sep 2012 21:00:30 GMT
212
+ body:
213
+ encoding: US-ASCII
214
+ string: ! '{"name":"executeScript","sessionId":"0b88b0cf-2e6c-1d43-809f-00d96f249417","status":0,"value":true}'
215
+ http_version: '1.1'
216
+ recorded_at: Sat, 29 Sep 2012 21:00:30 GMT
217
+ - request:
218
+ method: post
219
+ uri: http://127.0.0.1:7057/hub/session/0b88b0cf-2e6c-1d43-809f-00d96f249417/execute
220
+ body:
221
+ encoding: UTF-8
222
+ string: ! '{"script":"var result = jsApiReporter.resultsForSpecs([0,1,2,3,4]);
223
+ if (window.Prototype && Object.toJSON) { return Object.toJSON(result) } else
224
+ { return JSON.stringify(result) }","args":[]}'
225
+ headers:
226
+ accept:
227
+ - application/json
228
+ content-type:
229
+ - application/json; charset=utf-8
230
+ content-length:
231
+ - '190'
232
+ user-agent:
233
+ - Ruby
234
+ response:
235
+ status:
236
+ code: 200
237
+ message: OK
238
+ headers:
239
+ content-type:
240
+ - application/json; charset=UTF-8
241
+ connection:
242
+ - close
243
+ content-length:
244
+ - '773'
245
+ server:
246
+ - httpd.js
247
+ date:
248
+ - Sat, 29 Sep 2012 21:00:30 GMT
249
+ body:
250
+ encoding: US-ASCII
251
+ string: ! '{"name":"executeScript","sessionId":"0b88b0cf-2e6c-1d43-809f-00d96f249417","status":0,"value":"{\"0\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]},\"1\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]},\"2\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]},\"3\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]},\"4\":{\"result\":\"passed\",\"messages\":[{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}},{\"passed\":true,\"type\":\"expect\",\"message\":\"Passed.\",\"trace\":{}}]}}"}'
252
+ http_version: '1.1'
253
+ recorded_at: Sat, 29 Sep 2012 21:00:30 GMT
254
+ - request:
255
+ method: delete
256
+ uri: http://127.0.0.1:7057/hub/session/0b88b0cf-2e6c-1d43-809f-00d96f249417
257
+ body:
258
+ encoding: US-ASCII
259
+ string: ''
260
+ headers:
261
+ accept:
262
+ - application/json
263
+ user-agent:
264
+ - Ruby
265
+ response:
266
+ status:
267
+ code: 200
268
+ message: OK
269
+ headers:
270
+ content-type:
271
+ - application/json; charset=UTF-8
272
+ connection:
273
+ - close
274
+ content-length:
275
+ - '88'
276
+ server:
277
+ - httpd.js
278
+ date:
279
+ - Sat, 29 Sep 2012 21:00:30 GMT
280
+ body:
281
+ encoding: US-ASCII
282
+ string: ! '{"name":"quit","sessionId":"0b88b0cf-2e6c-1d43-809f-00d96f249417","status":0,"value":""}'
283
+ http_version: '1.1'
284
+ recorded_at: Sat, 29 Sep 2012 21:00:30 GMT
285
+ recorded_with: VCR 2.2.5
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'selenium_browser_driver'
3
+ require 'sample_results'
4
+ require 'selenium_driver_fixtures'
5
+
6
+ describe Jasmine::Sauce::CI::SeleniumBrowserDriver do
7
+
8
+ let(:under_test) { Jasmine::Sauce::CI::SeleniumBrowserDriver.new(browser) }
9
+ let(:browser) { "chrome" }
10
+ let(:driver) { double("SeleniumWebDriver") }
11
+
12
+ before do
13
+ Selenium::WebDriver.should_receive(:for).with(browser.to_sym).and_return(driver)
14
+ end
15
+
16
+ describe "#create_driver" do
17
+ subject { under_test }
18
+
19
+ specify { expect {subject}.not_to raise_error }
20
+ end
21
+
22
+ it_behaves_like "selenium driver"
23
+
24
+ end
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
  require 'sauce_config'
3
3
  require 'selenium_saucelabs_driver'
4
4
  require 'sample_results'
5
+ require 'selenium_driver_fixtures'
5
6
 
6
7
  describe Jasmine::Sauce::CI::SeleniumSauceLabsDriver do
7
8
 
@@ -9,12 +10,6 @@ describe Jasmine::Sauce::CI::SeleniumSauceLabsDriver do
9
10
  let(:config) { Jasmine::Sauce::CI::SauceConfig.new }
10
11
  let(:driver) { double("SeleniumWebDriver") }
11
12
 
12
- shared_context "create driver is stubbed" do
13
- before do
14
- Jasmine::Sauce::CI::SeleniumSauceLabsDriver.any_instance.should_receive(:create_driver).with(config).and_return(driver)
15
- end
16
- end
17
-
18
13
  describe "#create_driver" do
19
14
  let(:selenium_client) { double("Selenium::WebDriver::Remote::Http::Default") }
20
15
  let(:timeout) { "client timeout" }
@@ -38,46 +33,9 @@ describe Jasmine::Sauce::CI::SeleniumSauceLabsDriver do
38
33
  it("should interact with webdriver correctly") { subject }
39
34
  end
40
35
 
41
- describe "#connect" do
42
- include_context "create driver is stubbed"
43
- let(:url) { "http://jasmine.server.url/jasmine" }
44
- let(:navigator) { double("SeleniumNavigator") }
45
- subject { under_test.connect(url) }
46
- before do
47
- driver.should_receive(:navigate).and_return(navigator)
48
- navigator.should_receive(:to).with(url)
49
- end
50
-
51
- specify { expect { subject }.not_to raise_error }
52
- end
53
-
54
- describe "#disconnect" do
55
- include_context "create driver is stubbed"
56
- subject { under_test.disconnect }
57
- before do
58
- driver.should_receive(:quit)
59
- end
60
-
61
- specify { expect { subject }.not_to raise_error }
62
- end
63
-
64
- describe "#evaluate_js" do
65
- include_context "create driver is stubbed"
66
- let(:script) { "the javascript" }
67
- subject { under_test.evaluate_js(script) }
36
+ shared_context "create driver is stubbed" do
68
37
  before do
69
- driver.should_receive(:execute_script).and_return(script_result)
70
- end
71
-
72
- context "when simple result" do
73
- let(:script_result) { "true" }
74
- it { should be_true }
75
- end
76
-
77
- context "when json result" do
78
- include_context "suites sample"
79
- let(:script_result) { suites.to_json }
80
- it { should eq(JSON.parse(script_result)) }
38
+ Jasmine::Sauce::CI::SeleniumSauceLabsDriver.any_instance.should_receive(:create_driver).with(config).and_return(driver)
81
39
  end
82
40
  end
83
41
 
@@ -103,4 +61,8 @@ describe Jasmine::Sauce::CI::SeleniumSauceLabsDriver do
103
61
  it { subject['max-duration'].should eq "duration" }
104
62
  end
105
63
 
64
+ it_behaves_like "selenium driver" do
65
+ include_context "create driver is stubbed"
66
+ end
67
+
106
68
  end
@@ -1,16 +1,61 @@
1
1
  require_relative 'spec_helper'
2
2
  require_relative 'vcr_helper'
3
3
  require 'jasmine-selenium-sauce'
4
+ require 'browser_config'
4
5
  require 'sauce_config'
5
6
  require 'reporter_fake'
6
7
 
7
8
  describe Jasmine::Sauce::CI::Main do
8
9
 
9
- describe "#run" do
10
+ describe "#run_via_browser" do
11
+
12
+ pending "These tests disabled for CI because they currently depend on an actual browser"
13
+
14
+ let(:config) { Jasmine::Sauce::CI::BrowserConfig.new }
15
+ let(:reporter) { ReporterFake.new }
16
+ subject { Jasmine::Sauce::CI::Main.run_via_browser(config, reporter) }
17
+ after do
18
+ ENV.delete('JASMINE_URL')
19
+ ENV.delete('LOCAL_BROWSER')
20
+ end
21
+
22
+ context "when there are no failures" do
23
+ use_vcr_cassette 'jasmine_browser_success', record: :none
24
+ before do
25
+ ENV['JASMINE_URL'] = 'http://localhost:3000/jasmine'
26
+ ENV['LOCAL_BROWSER'] = 'firefox'
27
+ end
28
+
29
+ describe "passing tests" do
30
+ xit { subject[:passed].should eq([0,1,2,3,4]) }
31
+ end
32
+ describe "failing tests" do
33
+ xit { subject[:failed].should be_empty }
34
+ end
35
+ end
36
+
37
+ context "when there are failures" do
38
+ use_vcr_cassette 'jasmine_browser_failures', record: :none
39
+ before do
40
+ ENV['JASMINE_URL'] = 'http://localhost:3000/jasmine'
41
+ ENV['LOCAL_BROWSER'] = 'firefox'
42
+ end
43
+
44
+ describe "passing tests" do
45
+ xit { subject[:passed].should eq([0,2,3,4]) }
46
+ end
47
+ describe "failing tests" do
48
+ xit { subject[:failed].should eq([1]) }
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ describe "#run_via_saucelabs" do
10
55
 
11
56
  let(:config) { Jasmine::Sauce::CI::SauceConfig.new }
12
57
  let(:reporter) { ReporterFake.new }
13
- subject { Jasmine::Sauce::CI::Main.run(config, reporter) }
58
+ subject { Jasmine::Sauce::CI::Main.run_via_saucelabs(config, reporter) }
14
59
 
15
60
  after do
16
61
  ENV.delete('SAUCELABS_URL')
@@ -19,7 +64,8 @@ describe Jasmine::Sauce::CI::Main do
19
64
  end
20
65
 
21
66
  context "when there are no failures" do
22
- use_vcr_cassette 'jasmine_success', record: :none
67
+ use_vcr_cassette 'jasmine_saucelabs_success', record: :none
68
+
23
69
  before do
24
70
  ENV['SAUCELABS_URL'] = 'http://username:password@ondemand.saucelabs.com:80/wd/hub'
25
71
  ENV['JASMINE_URL'] = 'http://jasmine.server.com/jasmine'
@@ -35,7 +81,7 @@ describe Jasmine::Sauce::CI::Main do
35
81
  end
36
82
 
37
83
  context "when there are failures" do
38
- use_vcr_cassette 'jasmine_failures', record: :none
84
+ use_vcr_cassette 'jasmine_saucelabs_failures', record: :none
39
85
  before do
40
86
  ENV['SAUCELABS_URL'] = 'http://username:password@ondemand.saucelabs.com:80/wd/hub'
41
87
  ENV['JASMINE_URL'] = 'http://jasmine.server.com/jasmine'
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib', 'jasmine-selenium-sauce'))
3
- $LOAD_PATH.unshift(File.dirname(__FILE__))
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib', 'jasmine-selenium-sauce', 'drivers'))
5
4
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'fixtures'))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
6
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jasmine-selenium-sauce
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-28 00:00:00.000000000 Z
12
+ date: 2012-09-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fakeweb
@@ -164,6 +164,7 @@ extra_rdoc_files: []
164
164
  files:
165
165
  - .gitignore
166
166
  - .rspec
167
+ - .travis.yml
167
168
  - Gemfile
168
169
  - Guardfile
169
170
  - LICENSE
@@ -171,21 +172,30 @@ files:
171
172
  - Rakefile
172
173
  - jasmine-selenium-sauce.gemspec
173
174
  - lib/jasmine-selenium-sauce.rb
175
+ - lib/jasmine-selenium-sauce/browser_config.rb
176
+ - lib/jasmine-selenium-sauce/drivers.rb
177
+ - lib/jasmine-selenium-sauce/drivers/selenium_browser_driver.rb
178
+ - lib/jasmine-selenium-sauce/drivers/selenium_driver.rb
179
+ - lib/jasmine-selenium-sauce/drivers/selenium_saucelabs_driver.rb
174
180
  - lib/jasmine-selenium-sauce/jasmine_results.rb
175
181
  - lib/jasmine-selenium-sauce/rspec_reporter.rb
176
182
  - lib/jasmine-selenium-sauce/sauce_config.rb
177
183
  - lib/jasmine-selenium-sauce/selenium_runner.rb
178
- - lib/jasmine-selenium-sauce/selenium_saucelabs_driver.rb
184
+ - lib/jasmine-selenium-sauce/tasks/jasmine_selenium_sauce.rake
179
185
  - lib/jasmine-selenium-sauce/tasks/railtie.rb
180
- - lib/jasmine-selenium-sauce/tasks/rake_runner.rb
181
- - lib/jasmine-selenium-sauce/tasks/sauce.rake
186
+ - lib/jasmine-selenium-sauce/tasks/rake_browser_runner.rb
187
+ - lib/jasmine-selenium-sauce/tasks/rake_sauce_runner.rb
182
188
  - lib/jasmine-selenium-sauce/version.rb
183
- - spec/fixtures/vcr_cassettes/jasmine_failures.yml
184
- - spec/fixtures/vcr_cassettes/jasmine_success.yml
189
+ - spec/fixtures/selenium_driver_fixtures.rb
190
+ - spec/fixtures/vcr_cassettes/jasmine_browser_failures.yml
191
+ - spec/fixtures/vcr_cassettes/jasmine_browser_success.yml
192
+ - spec/fixtures/vcr_cassettes/jasmine_saucelabs_failures.yml
193
+ - spec/fixtures/vcr_cassettes/jasmine_saucelabs_success.yml
194
+ - spec/jasmine-selenium-sauce/drivers/selenium_browser_driver_spec.rb
195
+ - spec/jasmine-selenium-sauce/drivers/selenium_saucelabs_driver_spec.rb
185
196
  - spec/jasmine-selenium-sauce/jasmine_results_spec.rb
186
197
  - spec/jasmine-selenium-sauce/sauce_config_spec.rb
187
198
  - spec/jasmine-selenium-sauce/selenium_runner_spec.rb
188
- - spec/jasmine-selenium-sauce/selenium_saucelabs_driver_spec.rb
189
199
  - spec/jasmine-selenium-sauce_spec.rb
190
200
  - spec/spec_helper.rb
191
201
  - spec/support/reporter_fake.rb
@@ -203,18 +213,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
203
213
  - - ! '>='
204
214
  - !ruby/object:Gem::Version
205
215
  version: '0'
206
- segments:
207
- - 0
208
- hash: -2211963693914659536
209
216
  required_rubygems_version: !ruby/object:Gem::Requirement
210
217
  none: false
211
218
  requirements:
212
219
  - - ! '>='
213
220
  - !ruby/object:Gem::Version
214
221
  version: '0'
215
- segments:
216
- - 0
217
- hash: -2211963693914659536
218
222
  requirements: []
219
223
  rubyforge_project:
220
224
  rubygems_version: 1.8.24
@@ -223,12 +227,16 @@ specification_version: 3
223
227
  summary: Uses SauceLabs to connect to your server and run your Jasmine suites, producing
224
228
  an RSpec report
225
229
  test_files:
226
- - spec/fixtures/vcr_cassettes/jasmine_failures.yml
227
- - spec/fixtures/vcr_cassettes/jasmine_success.yml
230
+ - spec/fixtures/selenium_driver_fixtures.rb
231
+ - spec/fixtures/vcr_cassettes/jasmine_browser_failures.yml
232
+ - spec/fixtures/vcr_cassettes/jasmine_browser_success.yml
233
+ - spec/fixtures/vcr_cassettes/jasmine_saucelabs_failures.yml
234
+ - spec/fixtures/vcr_cassettes/jasmine_saucelabs_success.yml
235
+ - spec/jasmine-selenium-sauce/drivers/selenium_browser_driver_spec.rb
236
+ - spec/jasmine-selenium-sauce/drivers/selenium_saucelabs_driver_spec.rb
228
237
  - spec/jasmine-selenium-sauce/jasmine_results_spec.rb
229
238
  - spec/jasmine-selenium-sauce/sauce_config_spec.rb
230
239
  - spec/jasmine-selenium-sauce/selenium_runner_spec.rb
231
- - spec/jasmine-selenium-sauce/selenium_saucelabs_driver_spec.rb
232
240
  - spec/jasmine-selenium-sauce_spec.rb
233
241
  - spec/spec_helper.rb
234
242
  - spec/support/reporter_fake.rb
@@ -1,16 +0,0 @@
1
- namespace :jasmine do
2
-
3
- desc "Run Jasmine via SauceLabs"
4
- task :sauce do
5
- require "rspec/core/rake_task"
6
-
7
- RSpec::Core::RakeTask.new(:jasmine_sauce_runner) do |t|
8
- t.rspec_opts = ["--colour", "--format", ENV['JASMINE_SPEC_FORMAT'] || "progress"]
9
- t.verbose = true
10
- runner_path = File.expand_path(File.join(File.dirname(__FILE__), "rake_runner.rb"))
11
- t.pattern = [runner_path]
12
- end
13
-
14
- Rake::Task["jasmine_sauce_runner"].invoke
15
- end
16
- end