unobtainium-cucumber 0.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.
- checksums.yaml +7 -0
- data/.codeclimate.yml +34 -0
- data/.gitignore +57 -0
- data/.rspec +2 -0
- data/.rubocop.yml +78 -0
- data/.travis.yml +11 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +106 -0
- data/LICENSE +30 -0
- data/README.md +150 -0
- data/Rakefile +29 -0
- data/config/config.yml +28 -0
- data/features/action.feature +12 -0
- data/features/action_support.feature +17 -0
- data/features/driver_reset.feature +17 -0
- data/features/extensions.feature +7 -0
- data/features/status_actions.feature +115 -0
- data/features/step_definitions/action.rb +61 -0
- data/features/step_definitions/action_support.rb +40 -0
- data/features/step_definitions/driver_reset.rb +85 -0
- data/features/step_definitions/extensions.rb +19 -0
- data/features/step_definitions/mocks/scenario.rb +18 -0
- data/features/step_definitions/status_actions.rb +358 -0
- data/features/support/env.rb +27 -0
- data/features/support/utils.rb +47 -0
- data/lib/unobtainium-cucumber/action/content.rb +40 -0
- data/lib/unobtainium-cucumber/action/screenshot.rb +37 -0
- data/lib/unobtainium-cucumber/action/support/naming.rb +44 -0
- data/lib/unobtainium-cucumber/driver_reset.rb +34 -0
- data/lib/unobtainium-cucumber/status_actions.rb +272 -0
- data/lib/unobtainium-cucumber/version.rb +14 -0
- data/lib/unobtainium-cucumber.rb +20 -0
- data/unobtainium-cucumber.gemspec +54 -0
- metadata +244 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1e548c830ba46d389e732d11a3cee4e48c00a31b
|
4
|
+
data.tar.gz: f939dffce9e566047ed81b0ebdef13dfe48b2202
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c53e8436432b1a60edcb2ec8e2beed3e8756ab9c1e368773c86d12561229e1357b3ba84f07753eefbe84132d236b8cdf84cff3f0ce5643f31c330ec437c19b7f
|
7
|
+
data.tar.gz: c6f3ba4a52a937b58b7e4c30510b486b4925e13d0922ac2a40d798d4525955be40e72bd8deff612f8e2668d89ff989a24981e05371b86063de77f8bb17924d3c
|
data/.codeclimate.yml
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
---
|
2
|
+
engines:
|
3
|
+
bundler-audit:
|
4
|
+
enabled: true
|
5
|
+
duplication:
|
6
|
+
enabled: true
|
7
|
+
exclude_fingerprints:
|
8
|
+
- d85d6f12c93d79ccd43868b8315d8816
|
9
|
+
- a8e2b4ccb258f16eda697c5f98e21823
|
10
|
+
- 442a316695836b4f4693fe3786cd3396
|
11
|
+
- 1c24bb5da72323796b645814cc006684
|
12
|
+
- 4ff1112a73f7be30ecefa7bd90fdbf5a
|
13
|
+
config:
|
14
|
+
languages:
|
15
|
+
- ruby
|
16
|
+
- javascript
|
17
|
+
- python
|
18
|
+
- php
|
19
|
+
fixme:
|
20
|
+
enabled: true
|
21
|
+
rubocop:
|
22
|
+
enabled: true
|
23
|
+
ratings:
|
24
|
+
paths:
|
25
|
+
- Gemfile.lock
|
26
|
+
- "**.inc"
|
27
|
+
- "**.js"
|
28
|
+
- "**.jsx"
|
29
|
+
- "**.module"
|
30
|
+
- "**.php"
|
31
|
+
- "**.py"
|
32
|
+
- "**.rb"
|
33
|
+
exclude_paths:
|
34
|
+
- spec/
|
data/.gitignore
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
# Used by dotenv library to load environment variables.
|
14
|
+
# .env
|
15
|
+
|
16
|
+
## Specific to RubyMotion:
|
17
|
+
.dat*
|
18
|
+
.repl_history
|
19
|
+
build/
|
20
|
+
*.bridgesupport
|
21
|
+
build-iPhoneOS/
|
22
|
+
build-iPhoneSimulator/
|
23
|
+
|
24
|
+
## Specific to RubyMotion (use of CocoaPods):
|
25
|
+
#
|
26
|
+
# We recommend against adding the Pods directory to your .gitignore. However
|
27
|
+
# you should judge for yourself, the pros and cons are mentioned at:
|
28
|
+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
29
|
+
#
|
30
|
+
# vendor/Pods/
|
31
|
+
|
32
|
+
## Documentation cache and generated files:
|
33
|
+
/.yardoc/
|
34
|
+
/_yardoc/
|
35
|
+
/doc/
|
36
|
+
/rdoc/
|
37
|
+
|
38
|
+
## Environment normalization:
|
39
|
+
/.bundle/
|
40
|
+
/vendor/bundle
|
41
|
+
/lib/bundler/man/
|
42
|
+
|
43
|
+
# for a library or gem, you might want to ignore these files since the code is
|
44
|
+
# intended to run in multiple environments; otherwise, check them in:
|
45
|
+
# Gemfile.lock
|
46
|
+
# .ruby-version
|
47
|
+
# .ruby-gemset
|
48
|
+
|
49
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
50
|
+
.rvmrc
|
51
|
+
|
52
|
+
# Editor files
|
53
|
+
.*.sw*
|
54
|
+
|
55
|
+
# Cucumber
|
56
|
+
C:\\nppdf32Log\\debuglog.txt
|
57
|
+
config/*-local.yml
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.2
|
3
|
+
|
4
|
+
# Metrics
|
5
|
+
|
6
|
+
Metrics/LineLength:
|
7
|
+
Max: 83
|
8
|
+
Details: >-
|
9
|
+
Line length of 80 is ideal for readability and compatibility; we'll accept
|
10
|
+
an extra 3 for minor edge cases.
|
11
|
+
|
12
|
+
Metrics/MethodLength:
|
13
|
+
Max: 35
|
14
|
+
|
15
|
+
Metrics/BlockNesting:
|
16
|
+
Max: 5
|
17
|
+
|
18
|
+
Metrics/AbcSize:
|
19
|
+
Max: 50
|
20
|
+
|
21
|
+
Metrics/PerceivedComplexity:
|
22
|
+
Max: 15
|
23
|
+
|
24
|
+
Metrics/CyclomaticComplexity:
|
25
|
+
Max: 15
|
26
|
+
|
27
|
+
Metrics/ClassLength:
|
28
|
+
Max: 300
|
29
|
+
|
30
|
+
Metrics/ModuleLength:
|
31
|
+
Max: 300
|
32
|
+
|
33
|
+
# Style
|
34
|
+
|
35
|
+
Style/StringLiterals:
|
36
|
+
Enabled: false
|
37
|
+
|
38
|
+
Style/ConditionalAssignment:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
Style/EmptyLinesAroundModuleBody:
|
42
|
+
Enabled: false
|
43
|
+
|
44
|
+
Style/AndOr:
|
45
|
+
Enabled: false
|
46
|
+
|
47
|
+
Style/Not:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
Style/NegatedIf:
|
51
|
+
Enabled: false
|
52
|
+
|
53
|
+
Style/RedundantReturn:
|
54
|
+
Enabled: false
|
55
|
+
|
56
|
+
Style/IfUnlessModifier:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
Style/TrailingCommaInLiteral:
|
60
|
+
Enabled: false
|
61
|
+
|
62
|
+
Style/FirstParameterIndentation:
|
63
|
+
Enabled: false
|
64
|
+
|
65
|
+
Style/TrailingUnderscoreVariable:
|
66
|
+
Enabled: false
|
67
|
+
|
68
|
+
Style/NumericLiterals:
|
69
|
+
Enabled: false
|
70
|
+
|
71
|
+
Style/FileName:
|
72
|
+
Enabled: false
|
73
|
+
|
74
|
+
Style/SpaceAfterNot:
|
75
|
+
Enabled: false
|
76
|
+
|
77
|
+
Style/RegexpLiteral:
|
78
|
+
Enabled: false
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
unobtainium-cucumber (0.1.0)
|
5
|
+
cucumber (~> 2.0)
|
6
|
+
unobtainium (~> 0.10)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
appium_lib (8.2.1)
|
12
|
+
awesome_print (~> 1.6)
|
13
|
+
json (~> 1.8)
|
14
|
+
nokogiri (~> 1.6.6)
|
15
|
+
selenium-webdriver (~> 2.50)
|
16
|
+
tomlrb (~> 1.1)
|
17
|
+
archive-zip (0.7.0)
|
18
|
+
io-like (~> 0.3.0)
|
19
|
+
ast (2.3.0)
|
20
|
+
awesome_print (1.7.0)
|
21
|
+
builder (3.2.2)
|
22
|
+
childprocess (0.5.9)
|
23
|
+
ffi (~> 1.0, >= 1.0.11)
|
24
|
+
chromedriver-helper (1.0.0)
|
25
|
+
archive-zip (~> 0.7.0)
|
26
|
+
nokogiri (~> 1.6)
|
27
|
+
codeclimate-test-reporter (1.0.3)
|
28
|
+
simplecov
|
29
|
+
collapsium (0.8.2)
|
30
|
+
collapsium-config (0.4.3)
|
31
|
+
collapsium (~> 0.7)
|
32
|
+
cucumber (2.4.0)
|
33
|
+
builder (>= 2.1.2)
|
34
|
+
cucumber-core (~> 1.5.0)
|
35
|
+
cucumber-wire (~> 0.0.1)
|
36
|
+
diff-lcs (>= 1.1.3)
|
37
|
+
gherkin (~> 4.0)
|
38
|
+
multi_json (>= 1.7.5, < 2.0)
|
39
|
+
multi_test (>= 0.1.2)
|
40
|
+
cucumber-core (1.5.0)
|
41
|
+
gherkin (~> 4.0)
|
42
|
+
cucumber-wire (0.0.1)
|
43
|
+
diff-lcs (1.2.5)
|
44
|
+
docile (1.1.5)
|
45
|
+
ffi (1.9.14)
|
46
|
+
gherkin (4.0.0)
|
47
|
+
io-like (0.3.0)
|
48
|
+
json (1.8.3)
|
49
|
+
mini_portile2 (2.1.0)
|
50
|
+
multi_json (1.12.1)
|
51
|
+
multi_test (0.1.2)
|
52
|
+
nokogiri (1.6.8.1)
|
53
|
+
mini_portile2 (~> 2.1.0)
|
54
|
+
parser (2.3.3.1)
|
55
|
+
ast (~> 2.2)
|
56
|
+
phantomjs (2.1.1.0)
|
57
|
+
powerpack (0.1.1)
|
58
|
+
ptools (1.3.3)
|
59
|
+
rainbow (2.1.0)
|
60
|
+
rake (11.3.0)
|
61
|
+
rubocop (0.46.0)
|
62
|
+
parser (>= 2.3.1.1, < 3.0)
|
63
|
+
powerpack (~> 0.1)
|
64
|
+
rainbow (>= 1.99.1, < 3.0)
|
65
|
+
ruby-progressbar (~> 1.7)
|
66
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
67
|
+
ruby-progressbar (1.8.1)
|
68
|
+
rubyzip (1.2.0)
|
69
|
+
selenium-webdriver (2.53.4)
|
70
|
+
childprocess (~> 0.5)
|
71
|
+
rubyzip (~> 1.0)
|
72
|
+
websocket (~> 1.0)
|
73
|
+
simplecov (0.12.0)
|
74
|
+
docile (~> 1.1.0)
|
75
|
+
json (>= 1.8, < 3)
|
76
|
+
simplecov-html (~> 0.10.0)
|
77
|
+
simplecov-html (0.10.0)
|
78
|
+
sys-proctable (1.1.3)
|
79
|
+
tomlrb (1.2.3)
|
80
|
+
unicode-display_width (1.1.1)
|
81
|
+
unobtainium (0.10.0)
|
82
|
+
collapsium (~> 0.8)
|
83
|
+
collapsium-config (~> 0.4)
|
84
|
+
ptools (~> 1.3)
|
85
|
+
sys-proctable (~> 1.1)
|
86
|
+
websocket (1.2.3)
|
87
|
+
yard (0.9.5)
|
88
|
+
|
89
|
+
PLATFORMS
|
90
|
+
ruby
|
91
|
+
|
92
|
+
DEPENDENCIES
|
93
|
+
appium_lib
|
94
|
+
bundler (~> 1.12)
|
95
|
+
chromedriver-helper
|
96
|
+
codeclimate-test-reporter
|
97
|
+
phantomjs
|
98
|
+
rake (~> 11.2)
|
99
|
+
rubocop (~> 0.46)
|
100
|
+
selenium-webdriver
|
101
|
+
simplecov (~> 0.12)
|
102
|
+
unobtainium-cucumber!
|
103
|
+
yard (~> 0.9)
|
104
|
+
|
105
|
+
BUNDLED WITH
|
106
|
+
1.13.6
|
data/LICENSE
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Copyright (c) Jens Finkhaeuser (http://finkhaeuser.de/) and other
|
2
|
+
unobtainium-cucumber contributors. All rights not covered below are reserved.
|
3
|
+
|
4
|
+
The MIT +no-false-attribs License (MITNFA)
|
5
|
+
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
of this software and associated documentation files (the "Software"), to
|
8
|
+
deal in the Software without restriction, including without limitation the
|
9
|
+
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
10
|
+
sell copies of the Software, and to permit persons to whom the Software is
|
11
|
+
furnished to do so, subject to the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be included in
|
14
|
+
all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
Distributions of all or part of the Software intended to be used by the
|
17
|
+
recipients as they would use the unmodified Software, containing modifications
|
18
|
+
that substantially alter, remove, or disable functionality of the Software,
|
19
|
+
outside of the documented configuration mechanisms provided by the Software,
|
20
|
+
shall be modified such that the Original Author's bug reporting email addresses
|
21
|
+
and urls are either replaced with the contact information of the parties
|
22
|
+
responsible for the changes, or removed entirely.
|
23
|
+
|
24
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
25
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
26
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
27
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
28
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
29
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
30
|
+
IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
# unobtainium-cucumber
|
2
|
+
*Cucumber specific extensions to unobtainium.*
|
3
|
+
|
4
|
+
Instead of requiring [unobtainium](https://github.com/jfinkhaeuser/unobtainium)
|
5
|
+
in your [cucumber](https://cucumber.io/) project, just require this gem. It'll
|
6
|
+
automatically some cucumber specific features to your project:
|
7
|
+
|
8
|
+
- Reset the driver after each scenario.
|
9
|
+
- Take screenshots on failures.
|
10
|
+
|
11
|
+
Of course, each of these can be configured.
|
12
|
+
|
13
|
+
[](https://badge.fury.io/rb/unobtainium-cucumber)
|
14
|
+
[](https://travis-ci.org/jfinkhaeuser/unobtainium-cucumber)
|
15
|
+
[](https://codeclimate.com/github/jfinkhaeuser/unobtainium-cucumber)
|
16
|
+
[](https://codeclimate.com/github/jfinkhaeuser/unobtainium-cucumber/coverage)
|
17
|
+
|
18
|
+
# Usage
|
19
|
+
|
20
|
+
The project's own *cucumber*-based test suite demonstrates most of the details.
|
21
|
+
|
22
|
+
In brief, all the setup happens in the `features/support/env.rb` file:
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
require "unobtainium-cucumber"
|
26
|
+
```
|
27
|
+
|
28
|
+
And that's it.
|
29
|
+
|
30
|
+
## Configuration
|
31
|
+
|
32
|
+
All configuration for this gem happens in the `config.yml` read in by
|
33
|
+
*unobtainium*. All configuration keys respected in this gem live under the
|
34
|
+
top-level `cucumber` key, i.e.:
|
35
|
+
|
36
|
+
```yaml
|
37
|
+
# config.yaml
|
38
|
+
cucumber:
|
39
|
+
# this gem's keys go here
|
40
|
+
```
|
41
|
+
|
42
|
+
## Driver Reset
|
43
|
+
|
44
|
+
By default, the driver's `#reset` function is called after each scenario for
|
45
|
+
drivers that respond to such a function.
|
46
|
+
|
47
|
+
You can switch this off with the `cucumber.driver_reset` flag:
|
48
|
+
|
49
|
+
```yaml
|
50
|
+
# config.yaml
|
51
|
+
cucumber:
|
52
|
+
driver_reset: false
|
53
|
+
```
|
54
|
+
|
55
|
+
- If the flag is `false`, driver reset is switched off.
|
56
|
+
- If the flag is undefined (i.e. `nil`) or any other value, driver reset is
|
57
|
+
switched on. The recommended value to switch it on explicitly is, of course,
|
58
|
+
`true`.
|
59
|
+
|
60
|
+
## Status Actions
|
61
|
+
|
62
|
+
One of the convenient features of this gem is that it allows you to cleanly
|
63
|
+
define callbacks for a particular scenario status.
|
64
|
+
|
65
|
+
It's an extension of the [After hook](https://github.com/cucumber/cucumber/wiki/Hooks)
|
66
|
+
that allows you to specify whether your callback is invoked after a `Scenario`
|
67
|
+
or `Scenario Outline` (or both), and only it has `#passed?` or is `#failed?`
|
68
|
+
(or both). Status actions thus are actions triggered by a scenario status.
|
69
|
+
|
70
|
+
Status actions can be any function or block that takes two arguments, the
|
71
|
+
cucumber [World](https://github.com/cucumber/cucumber/wiki/A-Whole-New-World)
|
72
|
+
object, and the scenario itself (for further querying).
|
73
|
+
|
74
|
+
You can register them by including the `StatusActions` module in `World`, and
|
75
|
+
then calling `#register_action`:
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
|
79
|
+
World(StatusActions)
|
80
|
+
|
81
|
+
# ...
|
82
|
+
|
83
|
+
Given(/I foo/) do
|
84
|
+
# Registers #some_func for passed scenarios and outlines
|
85
|
+
register_action(:passed?, method(:some_func))
|
86
|
+
|
87
|
+
# Limits registration to outlines
|
88
|
+
register_action(:failed?, method(:some_func), type: :outline)
|
89
|
+
|
90
|
+
# Registers a block
|
91
|
+
register_action(:failed?) do |world, scenario|
|
92
|
+
# ...
|
93
|
+
end
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
97
|
+
There are a number of other methods in the `StatusActions` module that you
|
98
|
+
can use, but this is by far the most important.
|
99
|
+
|
100
|
+
### Configuration
|
101
|
+
|
102
|
+
Of course, the above is for programmatically adding actions. But `unobtainium`
|
103
|
+
is configuration driven, so it makes sense to configure status actions in this
|
104
|
+
gem:
|
105
|
+
|
106
|
+
```yaml
|
107
|
+
# config.yaml
|
108
|
+
cucumber:
|
109
|
+
status_actions:
|
110
|
+
passed?:
|
111
|
+
- global_action
|
112
|
+
failed?:
|
113
|
+
outline:
|
114
|
+
- dummy_action
|
115
|
+
scenario:
|
116
|
+
- method_from_own_extension
|
117
|
+
```
|
118
|
+
|
119
|
+
Note how you can either provide an `Array` of method names to a status key,
|
120
|
+
or further divide the status key into individual lists for outlines and
|
121
|
+
scenarios.
|
122
|
+
|
123
|
+
### Builtin Status Actions
|
124
|
+
|
125
|
+
There are not many status actions built into this gem, although that number
|
126
|
+
may rise. Currently, there is:
|
127
|
+
|
128
|
+
- `#store_screenshot` writes a browser screenshot to the `screenshots`
|
129
|
+
directory.
|
130
|
+
- `#store_content` writes a dump of the page content to the `content`
|
131
|
+
directory.
|
132
|
+
|
133
|
+
File names are timestamped, and include the scenario name. That should
|
134
|
+
make debugging a failed scenario easier.
|
135
|
+
|
136
|
+
If you do not configure any actions, the default is to take screenshots after
|
137
|
+
any failure.
|
138
|
+
|
139
|
+
### Custom Actions
|
140
|
+
|
141
|
+
As demonstrated earlier, custom actions are easy to define. If they are
|
142
|
+
resolvable before a scenario starts (i.e. files are appropriately required),
|
143
|
+
then you can configure them as string names in the configuration.
|
144
|
+
|
145
|
+
You can specify any method of the `World` object, so any from your own
|
146
|
+
exentsions to `World`. Alternatively, any function that is resolvable works.
|
147
|
+
You might have to use fully qualified names.
|
148
|
+
|
149
|
+
Custom actions have limited support facilities in the `Action::Support` module.
|
150
|
+
Check it out if you write your own.
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Rubocop
|
2
|
+
require 'rubocop/rake_task'
|
3
|
+
RuboCop::RakeTask.new(:rubocop)
|
4
|
+
|
5
|
+
# Cucumber
|
6
|
+
require 'cucumber'
|
7
|
+
require 'cucumber/rake/task'
|
8
|
+
Cucumber::Rake::Task.new(:cuke) do |t|
|
9
|
+
t.cucumber_opts = "--fail-fast --format=pretty --expand "\
|
10
|
+
"--order=random --backtrace"
|
11
|
+
end
|
12
|
+
|
13
|
+
# Documentation
|
14
|
+
require 'yard'
|
15
|
+
YARD::Rake::YardocTask.new do |t|
|
16
|
+
t.files = ['lib/**/*.rb']
|
17
|
+
t.options = ['-m', 'markdown']
|
18
|
+
t.stats_options = ['--list-undoc']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Combined test task
|
22
|
+
desc "Test all the things!"
|
23
|
+
task :test do
|
24
|
+
Rake::Task[:rubocop].invoke
|
25
|
+
Rake::Task[:cuke].invoke
|
26
|
+
end
|
27
|
+
|
28
|
+
# Default is the test task
|
29
|
+
task default: :test
|
data/config/config.yml
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
#
|
3
|
+
# unobtainium-cucumber
|
4
|
+
# https://github.com/jfinkhaeuser/unobtainium-cucumber
|
5
|
+
#
|
6
|
+
# Copyright (c) 2016 Jens Finkhaeuser and other unobtainium-cucumber
|
7
|
+
# contributors. All rights reserved.
|
8
|
+
#
|
9
|
+
|
10
|
+
driver: headless
|
11
|
+
|
12
|
+
cucumber:
|
13
|
+
|
14
|
+
# The following configuration options may be used to change the behaviour of
|
15
|
+
# the test suite.
|
16
|
+
#
|
17
|
+
# driver_reset: false
|
18
|
+
|
19
|
+
# The following options are expected by the test suite. Changing them may
|
20
|
+
# make the test suite fail. Proceed with caution!
|
21
|
+
status_actions:
|
22
|
+
passed?:
|
23
|
+
- global_action
|
24
|
+
failed?:
|
25
|
+
outline:
|
26
|
+
- dummy_action
|
27
|
+
scenario:
|
28
|
+
- method_from_own_extension
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Feature:
|
2
|
+
Action functions
|
3
|
+
|
4
|
+
Scenario: Screenshot taking
|
5
|
+
Given I take a screenshot
|
6
|
+
Then I expect there to be a matching screenshot file
|
7
|
+
|
8
|
+
|
9
|
+
Scenario: Content capture
|
10
|
+
Given I navigate to the best site in the world
|
11
|
+
When I capture the page content
|
12
|
+
Then I expect there to be a matching content file
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature:
|
2
|
+
Action support functions
|
3
|
+
|
4
|
+
Scenario Outline: Filename from scenario
|
5
|
+
Given I have a scenario named <name>
|
6
|
+
And I provide a tag <tag>
|
7
|
+
And the timestamp is <timestamp>
|
8
|
+
Then I expect the filename to match <filename>
|
9
|
+
|
10
|
+
Examples:
|
11
|
+
# Note:
|
12
|
+
# - all caps NIL becomes Ruby nil.
|
13
|
+
# - the filename will be interpreted as a regular expression as much
|
14
|
+
# as possible.
|
15
|
+
| name | tag | timestamp | filename |
|
16
|
+
| some scenario | NIL | 2016-11-25T15:48:13Z | 2016_11_25T15_48_13Z-some_scenario |
|
17
|
+
| some \| pipe | the_tag | 2016-11-25T15:48:13Z | 2016_11_25T15_48_13Z-the_tag-some_pipe |
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature:
|
2
|
+
Drivers should be automatically reset after each scenario
|
3
|
+
|
4
|
+
Background:
|
5
|
+
Given I remove any reset functions
|
6
|
+
|
7
|
+
Scenario: Reset driver by default
|
8
|
+
Given I run a scenario to test driver reset
|
9
|
+
Then the driver should be reset at the end
|
10
|
+
|
11
|
+
Scenario: Skip if driver does not define reset
|
12
|
+
Given I run a scenario with a driver that knowns no reset
|
13
|
+
Then the driver should not be reset at the end
|
14
|
+
|
15
|
+
Scenario: Skip if driver reset is switched off
|
16
|
+
Given I run a scenario with driver reset switched off
|
17
|
+
Then the driver should not be reset at the end
|