capybara_error_intel 1.0.0 → 1.0.1
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/.codeclimate.yml +16 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +9 -0
- data/.travis.yml +4 -0
- data/README.md +3 -5
- data/Rakefile +5 -3
- data/bin/console +3 -4
- data/capybara_error_intel.gemspec +11 -7
- data/lib/capybara_error_intel.rb +4 -1
- data/lib/capybara_error_intel/dsl.rb +31 -30
- data/lib/capybara_error_intel/version.rb +1 -1
- metadata +70 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81b194d9c5e7129751a873fa127b42a9bdc0a4a7
|
4
|
+
data.tar.gz: aa716d7326530d1bb0e7ba5ff46b2f20ec1e6543
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47c67c1c8c075df865c9f74a74f781240bd3d6a490dac915361210f55a0c4448d043c5699164d298a5d9504d12903054098003549b7274a5ca77d4d9aad279a7
|
7
|
+
data.tar.gz: 56645910801df9e620c9fd926fba6d26065fbedc8f426c7385204c4e5db8a7d5b6f45f652110fb5c698195e0ffef2ed922b8c3b20da466ba92bab55767fb875e
|
data/.codeclimate.yml
ADDED
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|

|
2
2
|
|
3
|
-
[](https://travis-ci.org/dkarter/capybara_error_intel)
|
3
|
+
[](https://travis-ci.org/dkarter/capybara_error_intel) [](https://codeclimate.com/github/dkarter/capybara_error_intel) [](https://codeclimate.com/github/dkarter/capybara_error_intel/coverage) [](https://codeclimate.com/github/dkarter/capybara_error_intel)
|
4
4
|
|
5
|
-
Capybara provides excellent error messages for its built in predicate methods: `has_selector?`, `has_text?`,
|
5
|
+
Capybara provides excellent error messages for its built in predicate methods: `has_selector?`, `has_text?`, `has_title?` etc., but when those are used from Page Objects while exposing predicate methods from the PageObjects themselves the error messages are lost and all we get is `expected true, got false`. Including this module into your PageObject by adding `include CapybaraErrorIntel::DSL` after `include Capybara::DSL` will return the heuristic error messages.
|
6
6
|
|
7
7
|
## Example
|
8
8
|
|
@@ -76,9 +76,7 @@ end
|
|
76
76
|
- `has_table?(locator, options={})`
|
77
77
|
|
78
78
|
|
79
|
-
It should be rather trivial to add more of them
|
80
|
-
to implement the rest in the near future but feel free to submit a pull
|
81
|
-
request.
|
79
|
+
It should be rather trivial to add more of them. Please open an issue or submit a pull request if something you need is missing.
|
82
80
|
|
83
81
|
|
84
82
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'rubocop/rake_task'
|
3
4
|
|
5
|
+
RuboCop::RakeTask.new
|
4
6
|
RSpec::Core::RakeTask.new(:spec)
|
5
7
|
|
6
|
-
task :
|
8
|
+
task default: [:spec, :rubocop]
|
data/bin/console
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'capybara_error_intel'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
8
8
|
|
9
9
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
require
|
10
|
+
require 'pry'
|
11
11
|
Pry.start
|
12
|
-
|
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ['Dorian Karter']
|
10
10
|
spec.email = ['jobs@doriankarter.com']
|
11
11
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
12
|
+
spec.summary = 'Provides Capybara\'s heuristic error messages for Page Objects'
|
13
|
+
spec.description = 'Capybara provides excellent error messages for its
|
14
14
|
built in predicate methods: has_selector?, has_text?,
|
15
15
|
has_title? etc.. but when those are used from Page
|
16
16
|
Objects while exposing predicate methods from the
|
@@ -19,12 +19,12 @@ Gem::Specification.new do |spec|
|
|
19
19
|
Including this module into your PageObject by adding
|
20
20
|
"include CapybaraErrorIntel::DSL" after
|
21
21
|
"include Capybara::DSL" will return the heuristic
|
22
|
-
error messages.
|
22
|
+
error messages.'
|
23
23
|
spec.homepage = 'https://github.com/dkarter/capybara_error_intel'
|
24
24
|
spec.license = 'MIT'
|
25
25
|
|
26
26
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
|
-
spec.require_paths = [
|
27
|
+
spec.require_paths = ['lib']
|
28
28
|
|
29
29
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
30
30
|
spec.add_development_dependency 'rake', '~> 10.0'
|
@@ -32,9 +32,13 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency 'launchy', '~> 0'
|
33
33
|
spec.add_development_dependency 'rack', '~> 1.6', '>= 1.6.4'
|
34
34
|
spec.add_development_dependency 'rack-test', '~> 0.5', '>= 0.5.4'
|
35
|
-
spec.add_development_dependency 'pry'
|
36
|
-
spec.add_development_dependency 'pry-byebug'
|
35
|
+
spec.add_development_dependency 'pry'
|
36
|
+
spec.add_development_dependency 'pry-byebug'
|
37
|
+
spec.add_development_dependency 'rubocop'
|
38
|
+
spec.add_development_dependency 'cadre'
|
39
|
+
spec.add_development_dependency 'simplecov'
|
40
|
+
spec.add_development_dependency 'codeclimate-test-reporter'
|
37
41
|
|
38
|
-
spec.add_runtime_dependency 'rspec', '~> 2
|
42
|
+
spec.add_runtime_dependency 'rspec', '~> 2'
|
39
43
|
spec.add_runtime_dependency 'capybara', '~> 2'
|
40
44
|
end
|
data/lib/capybara_error_intel.rb
CHANGED
@@ -5,6 +5,9 @@ require 'capybara/dsl'
|
|
5
5
|
require 'capybara/rspec/matchers'
|
6
6
|
require 'rspec'
|
7
7
|
|
8
|
+
# Provides Capybara::DSL predicate method wrappers that fail the test with heuristic
|
9
|
+
# Capybara errors when the result is `false`. Particularly useful when used
|
10
|
+
# inside page objects, allowing the user to expose predicate methods of their
|
11
|
+
# own.
|
8
12
|
module CapybaraErrorIntel
|
9
|
-
|
10
13
|
end
|
@@ -1,39 +1,40 @@
|
|
1
1
|
module CapybaraErrorIntel
|
2
|
+
# Wraps Capybara::DSL
|
2
3
|
module DSL
|
3
4
|
def has_selector?(*args)
|
4
5
|
matcher = has_selector(*args)
|
5
6
|
match_or_error(matcher)
|
6
7
|
end
|
7
8
|
|
8
|
-
def has_css?(css, options={})
|
9
|
+
def has_css?(css, options = {})
|
9
10
|
has_selector?(:css, css, options)
|
10
11
|
end
|
11
12
|
|
12
|
-
def has_button?(locator, options={})
|
13
|
+
def has_button?(locator, options = {})
|
13
14
|
has_selector?(:button, locator, options)
|
14
15
|
end
|
15
16
|
|
16
|
-
def has_field?(locator, options={})
|
17
|
+
def has_field?(locator, options = {})
|
17
18
|
has_selector?(:field, locator, options)
|
18
19
|
end
|
19
20
|
|
20
|
-
def has_xpath?(
|
21
|
+
def has_xpath?(_xpath, options = {})
|
21
22
|
has_selector?(:xpath, locator, options)
|
22
23
|
end
|
23
24
|
|
24
|
-
def has_checked_field?(locator, options={})
|
25
|
-
has_selector?(:field, locator, options.merge(:
|
25
|
+
def has_checked_field?(locator, options = {})
|
26
|
+
has_selector?(:field, locator, options.merge(checked: true))
|
26
27
|
end
|
27
28
|
|
28
|
-
def has_unchecked_field?(locator, options={})
|
29
|
-
has_selector?(:field, locator, options.merge(:
|
29
|
+
def has_unchecked_field?(locator, options = {})
|
30
|
+
has_selector?(:field, locator, options.merge(unchecked: true))
|
30
31
|
end
|
31
32
|
|
32
|
-
def has_select?(locator, options={})
|
33
|
+
def has_select?(locator, options = {})
|
33
34
|
has_selector?(:select, locator, options)
|
34
35
|
end
|
35
36
|
|
36
|
-
def has_table?(locator, options={})
|
37
|
+
def has_table?(locator, options = {})
|
37
38
|
has_selector?(:table, locator, options)
|
38
39
|
end
|
39
40
|
|
@@ -41,7 +42,7 @@ module CapybaraErrorIntel
|
|
41
42
|
matcher = has_text(*args)
|
42
43
|
match_or_error(matcher)
|
43
44
|
end
|
44
|
-
|
45
|
+
alias has_content? has_text?
|
45
46
|
|
46
47
|
def has_title?(title, options = {})
|
47
48
|
matcher = has_title(title, options)
|
@@ -50,30 +51,30 @@ module CapybaraErrorIntel
|
|
50
51
|
|
51
52
|
private
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
def has_selector(*args)
|
55
|
+
Capybara::RSpecMatchers::HaveSelector.new(*args)
|
56
|
+
end
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
58
|
+
def has_text(*args)
|
59
|
+
Capybara::RSpecMatchers::HaveText.new(*args)
|
60
|
+
end
|
60
61
|
|
61
|
-
|
62
|
-
|
63
|
-
|
62
|
+
def has_title(title, options)
|
63
|
+
Capybara::RSpecMatchers::HaveTitle.new(title, options)
|
64
|
+
end
|
64
65
|
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
def match_or_error(matcher)
|
67
|
+
matcher.matches?(Capybara.current_session) || handle_failure(matcher)
|
68
|
+
end
|
68
69
|
|
69
|
-
|
70
|
-
|
70
|
+
def handle_failure(matcher)
|
71
|
+
message = matcher.failure_message
|
71
72
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
end
|
73
|
+
if matcher.respond_to?(:diffable?) && matcher.diffable?
|
74
|
+
RSpec::Expectations.fail_with message, matcher.expected, matcher.actual
|
75
|
+
else
|
76
|
+
RSpec::Expectations.fail_with message
|
77
77
|
end
|
78
|
+
end
|
78
79
|
end
|
79
80
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara_error_intel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dorian Karter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,44 +116,100 @@ dependencies:
|
|
116
116
|
name: pry
|
117
117
|
requirement: !ruby/object:Gem::Requirement
|
118
118
|
requirements:
|
119
|
-
- - "
|
119
|
+
- - ">="
|
120
120
|
- !ruby/object:Gem::Version
|
121
|
-
version: '0
|
121
|
+
version: '0'
|
122
122
|
type: :development
|
123
123
|
prerelease: false
|
124
124
|
version_requirements: !ruby/object:Gem::Requirement
|
125
125
|
requirements:
|
126
|
-
- - "
|
126
|
+
- - ">="
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version: '0
|
128
|
+
version: '0'
|
129
129
|
- !ruby/object:Gem::Dependency
|
130
130
|
name: pry-byebug
|
131
131
|
requirement: !ruby/object:Gem::Requirement
|
132
132
|
requirements:
|
133
|
-
- - "
|
133
|
+
- - ">="
|
134
134
|
- !ruby/object:Gem::Version
|
135
|
-
version: '
|
135
|
+
version: '0'
|
136
136
|
type: :development
|
137
137
|
prerelease: false
|
138
138
|
version_requirements: !ruby/object:Gem::Requirement
|
139
139
|
requirements:
|
140
|
-
- - "
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: rubocop
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: cadre
|
159
|
+
requirement: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
type: :development
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
141
169
|
- !ruby/object:Gem::Version
|
142
|
-
version: '
|
170
|
+
version: '0'
|
171
|
+
- !ruby/object:Gem::Dependency
|
172
|
+
name: simplecov
|
173
|
+
requirement: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
type: :development
|
179
|
+
prerelease: false
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - ">="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
185
|
+
- !ruby/object:Gem::Dependency
|
186
|
+
name: codeclimate-test-reporter
|
187
|
+
requirement: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
type: :development
|
193
|
+
prerelease: false
|
194
|
+
version_requirements: !ruby/object:Gem::Requirement
|
195
|
+
requirements:
|
196
|
+
- - ">="
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
143
199
|
- !ruby/object:Gem::Dependency
|
144
200
|
name: rspec
|
145
201
|
requirement: !ruby/object:Gem::Requirement
|
146
202
|
requirements:
|
147
203
|
- - "~>"
|
148
204
|
- !ruby/object:Gem::Version
|
149
|
-
version: '2
|
205
|
+
version: '2'
|
150
206
|
type: :runtime
|
151
207
|
prerelease: false
|
152
208
|
version_requirements: !ruby/object:Gem::Requirement
|
153
209
|
requirements:
|
154
210
|
- - "~>"
|
155
211
|
- !ruby/object:Gem::Version
|
156
|
-
version: '2
|
212
|
+
version: '2'
|
157
213
|
- !ruby/object:Gem::Dependency
|
158
214
|
name: capybara
|
159
215
|
requirement: !ruby/object:Gem::Requirement
|
@@ -185,8 +241,10 @@ executables: []
|
|
185
241
|
extensions: []
|
186
242
|
extra_rdoc_files: []
|
187
243
|
files:
|
244
|
+
- ".codeclimate.yml"
|
188
245
|
- ".gitignore"
|
189
246
|
- ".rspec"
|
247
|
+
- ".rubocop.yml"
|
190
248
|
- ".travis.yml"
|
191
249
|
- Gemfile
|
192
250
|
- LICENSE.txt
|