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.
- data/.travis.yml +4 -0
- data/README.md +34 -1
- data/lib/jasmine-selenium-sauce.rb +12 -4
- data/lib/jasmine-selenium-sauce/browser_config.rb +22 -0
- data/lib/jasmine-selenium-sauce/drivers.rb +4 -0
- data/lib/jasmine-selenium-sauce/drivers/selenium_browser_driver.rb +18 -0
- data/lib/jasmine-selenium-sauce/drivers/selenium_driver.rb +28 -0
- data/lib/jasmine-selenium-sauce/{selenium_saucelabs_driver.rb → drivers/selenium_saucelabs_driver.rb} +2 -16
- data/lib/jasmine-selenium-sauce/tasks/jasmine_selenium_sauce.rake +30 -0
- data/lib/jasmine-selenium-sauce/tasks/railtie.rb +1 -1
- data/lib/jasmine-selenium-sauce/tasks/rake_browser_runner.rb +22 -0
- data/lib/jasmine-selenium-sauce/tasks/{rake_runner.rb → rake_sauce_runner.rb} +9 -4
- data/lib/jasmine-selenium-sauce/version.rb +1 -1
- data/spec/fixtures/selenium_driver_fixtures.rb +42 -0
- data/spec/fixtures/vcr_cassettes/jasmine_browser_failures.yml +286 -0
- data/spec/fixtures/vcr_cassettes/jasmine_browser_success.yml +285 -0
- data/spec/fixtures/vcr_cassettes/{jasmine_failures.yml → jasmine_saucelabs_failures.yml} +0 -0
- data/spec/fixtures/vcr_cassettes/{jasmine_success.yml → jasmine_saucelabs_success.yml} +0 -0
- data/spec/jasmine-selenium-sauce/drivers/selenium_browser_driver_spec.rb +24 -0
- data/spec/jasmine-selenium-sauce/{selenium_saucelabs_driver_spec.rb → drivers/selenium_saucelabs_driver_spec.rb} +7 -45
- data/spec/jasmine-selenium-sauce_spec.rb +50 -4
- data/spec/spec_helper.rb +2 -2
- metadata +25 -17
- data/lib/jasmine-selenium-sauce/tasks/sauce.rake +0 -16
data/.travis.yml
ADDED
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
|
-
##
|
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/
|
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.
|
14
|
-
driver = SeleniumSauceLabsDriver.new(
|
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(
|
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,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
|
-
|
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
|
@@ -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.
|
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
|
@@ -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
|
File without changes
|
File without changes
|
@@ -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
|
-
|
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
|
-
|
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 "#
|
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.
|
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 '
|
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 '
|
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.
|
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-
|
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/
|
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/
|
181
|
-
- lib/jasmine-selenium-sauce/tasks/
|
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/
|
184
|
-
- spec/fixtures/vcr_cassettes/
|
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/
|
227
|
-
- spec/fixtures/vcr_cassettes/
|
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
|