probedock-cucumber 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/VERSION +1 -1
- data/lib/probe_dock_cucumber.rb +1 -1
- data/lib/probe_dock_cucumber/formatter.rb +91 -26
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51a99b927ad1d4edd9c1c4a90c407b8a4743d262
|
4
|
+
data.tar.gz: 3e264ed7f2ec4beb507fe2b472c0fafa06d4bf0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cdc350bb64b6b7a8630d76c36bd8df034d5c41512ae51480fb8ee3abf7905bd7279a6b0db44fc35aa2f7eebfa72dc3c1ace97b4d8e77da81d5bb5a044c78608d
|
7
|
+
data.tar.gz: 21b1f8676d432f3276a92c26fafb7dbb363cfc1a612cb2e50337625d55a29ef3913c16e88c5e2ad641fb47f31e0d515a8c3914f8dccbc045f89da5b28ae0a1eb
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Probe Dock Cucumber
|
2
2
|
|
3
|
-
**Cucumber (Ruby) probe for [Probe Dock](https://github.com/probedock/probedock).**
|
3
|
+
**[Cucumber](https://cucumber.io) (Ruby) probe for [Probe Dock](https://github.com/probedock/probedock).**
|
4
4
|
|
5
5
|
[![Gem Version](https://badge.fury.io/rb/probedock-cucumber.svg)](http://badge.fury.io/rb/probedock-cucumber)
|
6
6
|
[![Dependency Status](https://gemnasium.com/probedock/probedock-cucumber-ruby.svg)](https://gemnasium.com/probedock/probedock-cucumber-ruby)
|
@@ -13,7 +13,7 @@
|
|
13
13
|
In your Gemfile:
|
14
14
|
|
15
15
|
```rb
|
16
|
-
gem 'probedock-cucumber', '~> 0.1.
|
16
|
+
gem 'probedock-cucumber', '~> 0.1.1'
|
17
17
|
```
|
18
18
|
|
19
19
|
Then run `bundle install`.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/lib/probe_dock_cucumber.rb
CHANGED
@@ -1,75 +1,151 @@
|
|
1
1
|
require 'paint'
|
2
2
|
require 'digest/sha1'
|
3
3
|
|
4
|
+
# Cucumber formatter to send test results to Probe Dock.
|
5
|
+
#
|
6
|
+
# The following events can be received by a formatter:
|
7
|
+
#
|
8
|
+
# before_features
|
9
|
+
# before_feature
|
10
|
+
# before_comment
|
11
|
+
# comment_line
|
12
|
+
# after_comment
|
13
|
+
# before_tags
|
14
|
+
# tag_name
|
15
|
+
# after_tags
|
16
|
+
# feature_name
|
17
|
+
# before_feature_element
|
18
|
+
# before_tags
|
19
|
+
# tag_name
|
20
|
+
# after_tags
|
21
|
+
# scenario_name
|
22
|
+
# before_steps
|
23
|
+
# before_step
|
24
|
+
# before_step_result
|
25
|
+
# step_name
|
26
|
+
# after_step_result
|
27
|
+
# after_step
|
28
|
+
# after_steps
|
29
|
+
# after_feature_element
|
30
|
+
# after_feature
|
31
|
+
# after_features
|
4
32
|
module ProbeDockCucumber
|
5
33
|
class Formatter
|
6
34
|
|
7
35
|
def initialize step_mother, io, options
|
8
36
|
|
37
|
+
# Initialize the Probe Dock client and an empty test run.
|
9
38
|
config = ProbeDockProbe.config
|
10
39
|
@client = ProbeDockProbe::Client.new config.server, config.client_options
|
11
40
|
@test_run = ProbeDockProbe::TestRun.new config.project
|
12
41
|
|
42
|
+
# Current feature data.
|
13
43
|
@current_feature = nil
|
14
44
|
@current_feature_tags = []
|
15
45
|
|
46
|
+
# Current scenario data.
|
16
47
|
@current_scenario = nil
|
17
48
|
@current_scenario_tags = []
|
18
49
|
@current_scenario_error = nil
|
19
50
|
end
|
20
51
|
|
52
|
+
# Called when the test suite starts.
|
21
53
|
def before_features *args
|
22
|
-
@
|
54
|
+
@suite_start_time = Time.now
|
23
55
|
end
|
24
56
|
|
57
|
+
# Called before each feature is tested.
|
25
58
|
def before_feature feature, *args
|
59
|
+
|
60
|
+
# Store the first line of the feature's description.
|
61
|
+
# It will be used in #add_result to build the complete name of the test.
|
26
62
|
@current_feature = feature.name.sub(/\n.*$/m, '').strip
|
63
|
+
|
64
|
+
# Reset feature and scenario data.
|
27
65
|
@current_feature_tags = []
|
28
66
|
@current_scenario = nil
|
67
|
+
@current_scenario_tags = []
|
68
|
+
@current_scenario_error = nil
|
29
69
|
end
|
30
70
|
|
31
|
-
|
71
|
+
# Called every time a tag is encountered, either at the feature or the scenario level.
|
72
|
+
def tag_name name, *args
|
32
73
|
if @current_scenario
|
33
|
-
@current_scenario_tags
|
74
|
+
@current_scenario_tags << name.sub(/^@/, '').strip
|
34
75
|
else
|
35
|
-
@current_feature_tags
|
76
|
+
@current_feature_tags << name.sub(/^@/, '').strip
|
36
77
|
end
|
37
78
|
end
|
38
79
|
|
80
|
+
# Called before each scenario is tested.
|
39
81
|
def before_feature_element feature_element, *args
|
82
|
+
|
83
|
+
# Store the first line of the scenario's description.
|
84
|
+
# It will be used in #add_result to build the complete name of the test.
|
40
85
|
@current_scenario = feature_element.name.sub(/\n.*$/m, '').strip
|
86
|
+
|
87
|
+
# Reset scenario data.
|
41
88
|
@current_scenario_tags = []
|
42
89
|
@current_scenario_error = nil
|
43
90
|
@current_scenario_start_time = Time.now
|
44
91
|
end
|
45
92
|
|
93
|
+
# Called after each scenario step (Given, When, Then) is executed.
|
46
94
|
def after_step_result keyword, step_match, multiline_arg, status, exception, *args
|
47
|
-
|
48
|
-
|
49
|
-
|
95
|
+
# If a step fails, the exception is provided here.
|
96
|
+
# It will be used in #add_result to build the error message of the test.
|
97
|
+
@current_scenario_error = exception if exception
|
50
98
|
end
|
51
99
|
|
100
|
+
# Called after each completed scenario.
|
52
101
|
def after_feature_element *args
|
53
|
-
add_result
|
102
|
+
add_result
|
54
103
|
end
|
55
104
|
|
105
|
+
# Called when the test suite ends.
|
56
106
|
def after_features *args
|
57
|
-
#puts "after_features: #{args.inspect}"
|
58
107
|
end_time = Time.now
|
59
|
-
@test_run.duration = ((end_time - @
|
60
|
-
|
61
|
-
#@client.process @test_run
|
108
|
+
@test_run.duration = ((end_time - @suite_start_time) * 1000).round
|
109
|
+
@client.process @test_run
|
62
110
|
end
|
63
111
|
|
64
112
|
private
|
65
113
|
|
66
|
-
|
114
|
+
# Adds a result to the test run.
|
115
|
+
# The test and result data was stored while the features and scenarios
|
116
|
+
# were being executed (see #before_feature, #tag_name, etc).
|
117
|
+
def add_result
|
67
118
|
|
68
|
-
|
69
|
-
|
119
|
+
result_options = {
|
120
|
+
name: complete_name,
|
121
|
+
passed: !@current_scenario_error,
|
70
122
|
data: {}
|
71
123
|
}
|
72
124
|
|
125
|
+
result_options[:duration] = ((Time.now - @current_scenario_start_time) * 1000).round
|
126
|
+
|
127
|
+
# Combine the tags of the feature and of the scenario.
|
128
|
+
result_options[:tags] = (@current_feature_tags + @current_scenario_tags).uniq.sort
|
129
|
+
|
130
|
+
# The fingerprint identifying the test contains the first line of the
|
131
|
+
# feature's and the scenario's descriptions joined with a separator.
|
132
|
+
fingerprint_data = [ @current_feature, @current_scenario ]
|
133
|
+
result_options[:fingerprint] = Digest::SHA1.hexdigest fingerprint_data.join('|||')
|
134
|
+
result_options[:data][:fingerprint] = result_options[:fingerprint]
|
135
|
+
|
136
|
+
# Build the message from the error's message and backtrace if an error occurred.
|
137
|
+
result_options[:message] = failure_message @current_scenario_error if @current_scenario_error
|
138
|
+
|
139
|
+
@test_run.add_result result_options
|
140
|
+
end
|
141
|
+
|
142
|
+
# Builds the complete test name.
|
143
|
+
# The name is obtained by joining the first line of the feature's
|
144
|
+
# and the scenario's descriptions. Additionally, if the feature's
|
145
|
+
# description doesn't end with a dot, a semicolon is added
|
146
|
+
# (e.g. "Feature: Scenario").
|
147
|
+
def complete_name
|
148
|
+
|
73
149
|
name = @current_feature.dup
|
74
150
|
if name.match /\.$/
|
75
151
|
name << ' '
|
@@ -78,17 +154,6 @@ module ProbeDockCucumber
|
|
78
154
|
end
|
79
155
|
|
80
156
|
name << @current_scenario
|
81
|
-
|
82
|
-
options[:name] = name
|
83
|
-
|
84
|
-
fingerprint_data = [ @current_feature, @current_scenario ]
|
85
|
-
options[:fingerprint] = Digest::SHA1.hexdigest fingerprint_data.join('|||')
|
86
|
-
options[:data][:fingerprint] = options[:fingerprint]
|
87
|
-
|
88
|
-
options.merge! passed: successful, duration: ((Time.now - @current_scenario_start_time) * 1000).round
|
89
|
-
options[:message] = failure_message error if error
|
90
|
-
|
91
|
-
@test_run.add_result options
|
92
157
|
end
|
93
158
|
|
94
159
|
def failure_message error
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: probedock-cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Oulevay (Alpha Hydrae)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: probedock-ruby
|