jasmine-selenium-sauce 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.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
|