watir-rspec 1.1.3 → 2.0.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.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/LICENSE +1 -1
- data/lib/watir/rspec/cli.rb +1 -0
- data/lib/watir/rspec/helper.rb +11 -2
- data/lib/watir/rspec/html_formatter.rb +20 -15
- data/lib/watir/rspec/matchers.rb +4 -4
- data/lib/watir/rspec/version.rb +5 -5
- data/spec/watir/rspec/active_record_shared_connection_spec.rb +4 -4
- data/spec/watir/rspec/helper_spec.rb +12 -12
- data/spec/watir/rspec/matchers/base_matcher_spec.rb +29 -29
- data/spec/watir/rspec/matchers_spec.rb +6 -6
- data/spec/watir/rspec_spec.rb +6 -6
- data/watir-rspec.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7e334fd2ce8294279e7c24f43373a308a135a37
|
4
|
+
data.tar.gz: 88728d14f335c70a8a6ebd3469064e83f893ae48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5616334b3367d00836dffbfe0dd506ad0724754cdad5ee3b7e437d1600703543e8a28cce1f739fce6383b82b3fc99cf94f733bd32076afd711fc057166034cf6
|
7
|
+
data.tar.gz: 7f4563629337a557767228aff261f2fe0f2a92bf1270b022aed96091f48c741fb10ad2ef15ec1f3da9dd26411bfd82713220fcc5a604a1988af0174a369bf3e2
|
data/CHANGES.md
CHANGED
data/LICENSE
CHANGED
data/lib/watir/rspec/cli.rb
CHANGED
data/lib/watir/rspec/helper.rb
CHANGED
@@ -21,10 +21,19 @@ module Watir
|
|
21
21
|
if browser.respond_to?(name)
|
22
22
|
Helper.module_eval %Q[
|
23
23
|
def #{name}(*args)
|
24
|
-
|
24
|
+
if block_given?
|
25
|
+
browser.send(:#{name}, *args) {yield}
|
26
|
+
else
|
27
|
+
browser.send(:#{name}, *args)
|
28
|
+
end
|
25
29
|
end
|
26
30
|
]
|
27
|
-
|
31
|
+
|
32
|
+
if block_given?
|
33
|
+
self.send(name, *args) {yield}
|
34
|
+
else
|
35
|
+
self.send(name, *args)
|
36
|
+
end
|
28
37
|
else
|
29
38
|
super
|
30
39
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'rspec/core/formatters'
|
1
2
|
require 'rspec/core/formatters/html_formatter'
|
2
3
|
require 'pathname'
|
3
4
|
require 'fileutils'
|
@@ -9,6 +10,9 @@ module Watir
|
|
9
10
|
# * saves html of the browser upon test failure
|
10
11
|
# * saves all files generated/downloaded during the test and shows them in the report
|
11
12
|
class HtmlFormatter < ::RSpec::Core::Formatters::HtmlFormatter
|
13
|
+
|
14
|
+
::RSpec::Core::Formatters.register self, *(::RSpec::Core::Formatters::Loader.formatters[::RSpec::Core::Formatters::HtmlFormatter])
|
15
|
+
|
12
16
|
# @private
|
13
17
|
def initialize(output)
|
14
18
|
@output_path = File.expand_path(ENV["WATIR_RESULTS_PATH"] || (output.respond_to?(:path) ? output.path : "tmp/spec-results/index.html"))
|
@@ -36,21 +40,6 @@ module Watir
|
|
36
40
|
super
|
37
41
|
end
|
38
42
|
|
39
|
-
# @private
|
40
|
-
def extra_failure_content(exception)
|
41
|
-
browser = example_group.before_all_ivars[:@browser] || $browser
|
42
|
-
return super unless browser && browser.exists?
|
43
|
-
|
44
|
-
save_screenshot browser
|
45
|
-
save_html browser
|
46
|
-
|
47
|
-
content = []
|
48
|
-
content << "<span>"
|
49
|
-
@files_saved_during_example.each {|f| content << link_for(f)}
|
50
|
-
content << "</span>"
|
51
|
-
super + content.join($/)
|
52
|
-
end
|
53
|
-
|
54
43
|
# Generate unique file path for the current spec. If the file
|
55
44
|
# will be created during that spec and spec fails then it will be
|
56
45
|
# shown automatically in the html report.
|
@@ -68,6 +57,22 @@ module Watir
|
|
68
57
|
|
69
58
|
private
|
70
59
|
|
60
|
+
# @private
|
61
|
+
def extra_failure_content(exception)
|
62
|
+
return super unless example_group # apparently there are cases where rspec failures are encountered and the example_group is not set (i.e. nil)
|
63
|
+
browser = example_group.before_context_ivars[:@browser] || $browser
|
64
|
+
return super unless browser && browser.exists?
|
65
|
+
|
66
|
+
save_screenshot browser
|
67
|
+
save_html browser
|
68
|
+
|
69
|
+
content = []
|
70
|
+
content << "<span>"
|
71
|
+
@files_saved_during_example.each {|f| content << link_for(f)}
|
72
|
+
content << "</span>"
|
73
|
+
super + content.join($/)
|
74
|
+
end
|
75
|
+
|
71
76
|
def link_for(file)
|
72
77
|
return unless File.exists?(file[:path])
|
73
78
|
|
data/lib/watir/rspec/matchers.rb
CHANGED
@@ -10,17 +10,17 @@ module Watir
|
|
10
10
|
# result should be true for the whole specified time period.
|
11
11
|
#
|
12
12
|
# @example Wait for 2 seconds until element is present (element exists and is visible)
|
13
|
-
# text_field.
|
13
|
+
# expect(text_field).to be_present.within(2)
|
14
14
|
#
|
15
15
|
# @example Wait for 2 seconds until element is visible
|
16
|
-
# text_field.
|
16
|
+
# expect(text_field).to be_visible.within(2)
|
17
17
|
#
|
18
18
|
# @example Wait for 2 seconds until element exists
|
19
|
-
# text_field.
|
19
|
+
# expect(text_field).to exist.within(2)
|
20
20
|
#
|
21
21
|
# @example Make sure that container is visible for the whole time during 2 seconds
|
22
22
|
# button.click
|
23
|
-
#
|
23
|
+
# expect(text_field).to be_visible.during(2)
|
24
24
|
module Matchers
|
25
25
|
def be_present
|
26
26
|
BaseMatcher.new :present?
|
data/lib/watir/rspec/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
module Watir
|
2
|
-
class RSpec
|
3
|
-
VERSION = "
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module Watir
|
2
|
+
class RSpec
|
3
|
+
VERSION = "2.0.0"
|
4
|
+
end
|
5
|
+
end
|
@@ -8,19 +8,19 @@ describe TestModel do
|
|
8
8
|
before { described_class.class_variable_set :@@shared_connection, nil }
|
9
9
|
|
10
10
|
it "reuses the connection" do
|
11
|
-
described_class.
|
11
|
+
expect(described_class).to receive(:retrieve_connection).once.and_return(:established_connection)
|
12
12
|
|
13
|
-
2.times { described_class.connection.
|
13
|
+
2.times { expect(described_class.connection).to be_eql :established_connection }
|
14
14
|
end
|
15
15
|
|
16
16
|
it "uses mutex" do
|
17
|
-
described_class.
|
17
|
+
expect(described_class).to receive(:retrieve_connection).once { sleep 0.1; :established_connection }
|
18
18
|
|
19
19
|
thr = Thread.new { described_class.connection }
|
20
20
|
|
21
21
|
t = Time.now
|
22
22
|
described_class.connection
|
23
|
-
(Time.now - t).
|
23
|
+
expect(Time.now - t).to be >= 0.1
|
24
24
|
thr.join
|
25
25
|
end
|
26
26
|
end
|
@@ -7,50 +7,50 @@ describe Watir::RSpec::Helper do
|
|
7
7
|
context "#browser" do
|
8
8
|
it "delegates to @browser if exists" do
|
9
9
|
@browser = :browser
|
10
|
-
browser.
|
10
|
+
expect(browser).to be @browser
|
11
11
|
end
|
12
12
|
|
13
13
|
it "delegates to @browser if @browser exists even if $browser exists" do
|
14
14
|
@browser = :browser
|
15
15
|
$browser = :global_browser
|
16
|
-
browser.
|
16
|
+
expect(browser).to be @browser
|
17
17
|
end
|
18
18
|
|
19
19
|
it "delegates to $browser if @browser does not exist" do
|
20
20
|
$browser = :global_browser
|
21
|
-
browser.
|
21
|
+
expect(browser).to be $browser
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
context "#method_missing" do
|
26
26
|
it "redirects missing methods to browser if method exists" do
|
27
27
|
@browser = double("browser", coolness_factor: :very)
|
28
|
-
coolness_factor.
|
28
|
+
expect(coolness_factor).to eql :very
|
29
29
|
end
|
30
30
|
|
31
31
|
it "raises error when browser does not have method" do
|
32
32
|
@browser = double("browser")
|
33
|
-
described_class.
|
33
|
+
expect(described_class).not_to be_method_defined :not_existing_method
|
34
34
|
|
35
35
|
expect do
|
36
36
|
self.not_existing_method
|
37
37
|
end.to raise_error(NoMethodError)
|
38
|
-
|
39
|
-
described_class.should_not be_method_defined :not_existing_method
|
38
|
+
expect(described_class).not_to be_method_defined :not_existing_method
|
40
39
|
end
|
41
40
|
|
42
41
|
it "adds browser methods to the helper" do
|
43
42
|
@browser = double("browser", method_to_be_defined: :done)
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
|
44
|
+
expect(described_class).not_to be_method_defined :method_to_be_defined
|
45
|
+
expect(method_to_be_defined).to eql :done
|
46
|
+
expect(described_class).to be_method_defined :method_to_be_defined
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
it "#p is delegated to the browser" do
|
51
51
|
@browser = double("browser", p: "#p")
|
52
|
-
described_class.
|
52
|
+
expect(described_class).not_to receive(:method_missing)
|
53
53
|
|
54
|
-
p.
|
54
|
+
expect(p).to eql "#p"
|
55
55
|
end
|
56
56
|
end
|
@@ -5,25 +5,25 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
5
5
|
|
6
6
|
it "#matches?" do
|
7
7
|
object = double("element", foo?: true)
|
8
|
-
object.
|
8
|
+
expect(object).to be_foo
|
9
9
|
end
|
10
10
|
|
11
11
|
it "#matches? with error" do
|
12
12
|
object = double("element", foo?: false)
|
13
13
|
expect {
|
14
|
-
object.
|
14
|
+
expect(object).to be_foo
|
15
15
|
}.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "#does_not_match?" do
|
19
19
|
object = double("element", foo?: false)
|
20
|
-
object.
|
20
|
+
expect(object).not_to be_foo
|
21
21
|
end
|
22
22
|
|
23
23
|
it "#does_not_match? with error" do
|
24
24
|
object = double("element", foo?: true)
|
25
25
|
expect {
|
26
|
-
object.
|
26
|
+
expect(object).not_to be_foo
|
27
27
|
}.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
28
28
|
end
|
29
29
|
|
@@ -33,10 +33,10 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
33
33
|
it "#matches?" do
|
34
34
|
object = double("element")
|
35
35
|
@result = false
|
36
|
-
object.
|
36
|
+
allow(object).to receive (:foo?) { @result }
|
37
37
|
thr = Thread.new { sleep 0.1; @result = true }
|
38
38
|
|
39
|
-
object.
|
39
|
+
expect(object).to be_foo.within(1)
|
40
40
|
thr.join
|
41
41
|
end
|
42
42
|
|
@@ -44,14 +44,14 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
44
44
|
object = double("element", foo?: false)
|
45
45
|
|
46
46
|
expect {
|
47
|
-
object.
|
47
|
+
expect(object).to be_foo.within(0.1)
|
48
48
|
}.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
49
49
|
end
|
50
50
|
|
51
51
|
it "#matches? with some other error" do
|
52
52
|
object = double("element")
|
53
53
|
raised = false
|
54
|
-
object.
|
54
|
+
allow(object).to receive (:foo?) do
|
55
55
|
unless raised
|
56
56
|
raised = true
|
57
57
|
raise "Some unexpected exception"
|
@@ -61,17 +61,17 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
object.
|
65
|
-
raised.
|
64
|
+
expect(object).to be_foo.within(1)
|
65
|
+
expect(raised).to be true
|
66
66
|
end
|
67
67
|
|
68
68
|
it "#does_not_match?" do
|
69
69
|
object = double("element")
|
70
70
|
@result = true
|
71
|
-
object.
|
71
|
+
allow(object).to receive (:foo?) { @result }
|
72
72
|
thr = Thread.new { sleep 0.1; @result = false }
|
73
73
|
|
74
|
-
object.
|
74
|
+
expect(object).not_to be_foo.within(1)
|
75
75
|
thr.join
|
76
76
|
end
|
77
77
|
|
@@ -79,14 +79,14 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
79
79
|
object = double("element", foo?: true)
|
80
80
|
|
81
81
|
expect {
|
82
|
-
object.
|
82
|
+
expect(object).not_to be_foo.within(0.1)
|
83
83
|
}.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
84
84
|
end
|
85
85
|
|
86
86
|
it "#does_not_match? with some other error" do
|
87
87
|
object = double("element")
|
88
88
|
raised = false
|
89
|
-
object.
|
89
|
+
allow(object).to receive (:foo?) do
|
90
90
|
unless raised
|
91
91
|
raised = true
|
92
92
|
raise "Some unexpected exception"
|
@@ -96,8 +96,8 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
|
-
object.
|
100
|
-
raised.
|
99
|
+
expect(object).not_to be_foo.within(1)
|
100
|
+
expect(raised).to be true
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -107,17 +107,17 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
107
107
|
it "#matches?" do
|
108
108
|
object = double("element", foo?: true)
|
109
109
|
|
110
|
-
object.
|
110
|
+
expect(object).to be_foo.during(0.1)
|
111
111
|
end
|
112
112
|
|
113
113
|
it "#matches? with timeout error" do
|
114
114
|
object = double("element")
|
115
115
|
@result = true
|
116
|
-
object.
|
116
|
+
allow(object).to receive (:foo?) { @result }
|
117
117
|
thr = Thread.new { sleep 0.1; @result = false }
|
118
118
|
|
119
119
|
expect {
|
120
|
-
object.
|
120
|
+
expect(object).to be_foo.during(1)
|
121
121
|
}.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
122
122
|
thr.join
|
123
123
|
end
|
@@ -125,7 +125,7 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
125
125
|
it "#matches? with some other error" do
|
126
126
|
object = double("element")
|
127
127
|
raised = false
|
128
|
-
object.
|
128
|
+
allow(object).to receive (:foo?) do
|
129
129
|
unless raised
|
130
130
|
raised = true
|
131
131
|
raise "Some unexpected exception"
|
@@ -134,24 +134,24 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
|
-
object.
|
138
|
-
raised.
|
137
|
+
expect(object).to be_foo.during(0.1)
|
138
|
+
expect(raised).to be true
|
139
139
|
end
|
140
140
|
|
141
141
|
it "#does_not_match?" do
|
142
142
|
object = double("element", foo?: false)
|
143
143
|
|
144
|
-
object.
|
144
|
+
expect(object).not_to be_foo.during(0.1)
|
145
145
|
end
|
146
146
|
|
147
147
|
it "#does_not_match? with timeout error" do
|
148
148
|
object = double("element")
|
149
149
|
@result = false
|
150
|
-
object.
|
150
|
+
allow(object).to receive (:foo?) { @result }
|
151
151
|
thr = Thread.new { sleep 0.1; @result = true }
|
152
152
|
|
153
153
|
expect {
|
154
|
-
object.
|
154
|
+
expect(object).not_to be_foo.during(1)
|
155
155
|
}.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
156
156
|
thr.join
|
157
157
|
end
|
@@ -159,7 +159,7 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
159
159
|
it "#does_not_match? with some other error" do
|
160
160
|
object = double("element")
|
161
161
|
raised = false
|
162
|
-
object.
|
162
|
+
allow(object).to receive (:foo?) do
|
163
163
|
unless raised
|
164
164
|
raised = true
|
165
165
|
raise "Some unexpected exception"
|
@@ -168,14 +168,14 @@ describe Watir::RSpec::Matchers::BaseMatcher do
|
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
171
|
-
object.
|
172
|
-
raised.
|
171
|
+
expect(object).not_to be_foo.during(0.1)
|
172
|
+
expect(raised).to be true
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
176
176
|
def should_take_at_least(seconds)
|
177
177
|
t = Time.now
|
178
178
|
yield
|
179
|
-
(Time.now - t).
|
179
|
+
expect(Time.now - t).to be >= seconds
|
180
180
|
end
|
181
181
|
end
|
@@ -5,19 +5,19 @@ describe Watir::RSpec::Matchers do
|
|
5
5
|
|
6
6
|
it "#be_present" do
|
7
7
|
matcher = be_present
|
8
|
-
matcher.
|
9
|
-
matcher.instance_variable_get(:@predicate).
|
8
|
+
expect(matcher).to be_a Watir::RSpec::Matchers::BaseMatcher
|
9
|
+
expect(matcher.instance_variable_get(:@predicate)).to eql :present?
|
10
10
|
end
|
11
11
|
|
12
12
|
it "#be_visible" do
|
13
13
|
matcher = be_visible
|
14
|
-
matcher.
|
15
|
-
matcher.instance_variable_get(:@predicate).
|
14
|
+
expect(matcher).to be_a Watir::RSpec::Matchers::BaseMatcher
|
15
|
+
expect(matcher.instance_variable_get(:@predicate)).to eql :visible?
|
16
16
|
end
|
17
17
|
|
18
18
|
it "#exist" do
|
19
19
|
matcher = exist
|
20
|
-
matcher.
|
21
|
-
matcher.instance_variable_get(:@predicate).
|
20
|
+
expect(matcher).to be_a Watir::RSpec::Matchers::BaseMatcher
|
21
|
+
expect(matcher.instance_variable_get(:@predicate)).to eql :exist?
|
22
22
|
end
|
23
23
|
end
|
data/spec/watir/rspec_spec.rb
CHANGED
@@ -4,18 +4,18 @@ describe Watir::RSpec do
|
|
4
4
|
context "#file_path" do
|
5
5
|
it "without description" do
|
6
6
|
formatter = double("formatter", file_path: "file-path")
|
7
|
-
Watir::RSpec.
|
8
|
-
formatter.
|
7
|
+
allow(Watir::RSpec).to receive (:formatter) {formatter}
|
8
|
+
expect(formatter).to receive(:file_path).with("name", nil)
|
9
9
|
|
10
|
-
Watir::RSpec.file_path("name").
|
10
|
+
expect(Watir::RSpec.file_path("name")).to be == "file-path"
|
11
11
|
end
|
12
12
|
|
13
13
|
it "with description" do
|
14
14
|
formatter = double("formatter", file_path: "file-path")
|
15
|
-
Watir::RSpec.
|
16
|
-
formatter.
|
15
|
+
allow(Watir::RSpec).to receive (:formatter) {formatter}
|
16
|
+
expect(formatter).to receive(:file_path).with("name", "description")
|
17
17
|
|
18
|
-
Watir::RSpec.file_path("name", "description").
|
18
|
+
expect(Watir::RSpec.file_path("name", "description")).to be == "file-path"
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/watir-rspec.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = Watir::RSpec::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency "rspec", "~>
|
18
|
+
gem.add_dependency "rspec", "~>3.0"
|
19
19
|
gem.add_dependency "watir", "~>5.0"
|
20
20
|
|
21
21
|
gem.add_development_dependency "yard"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watir-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jarmo Pertman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: watir
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|