rspec_junit_formatter 0.4.0.pre2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/LICENSE +1 -1
- data/README.md +43 -12
- data/lib/rspec_junit_formatter.rb +15 -0
- data/lib/rspec_junit_formatter/rspec2.rb +8 -0
- data/lib/rspec_junit_formatter/rspec3.rb +8 -0
- metadata +37 -17
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 615b543d4cbd284941621231bb5fbc4132a1991a9032d9f35e2d63dd1461a5e3
|
4
|
+
data.tar.gz: 5a62fe31f2292c2c80c152e3ecbdafaf5d960838d1e729574bf6479bc6fd7599
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79c1155ccd8b77d1dc9176bd6eb033cb4bc3a4d2b2452421180dae502f96ab98c36010db89d5bcee9f943fd5959b7241b12a12f14f60548de8034efe04a2af23
|
7
|
+
data.tar.gz: 249d53fef2a5a8e5f5abc0d38f803f9a628d075e53f5448e580265714b9d38c87f49cef98c3e91a0f047311f8ece77629a837229c6ecd4abe1765f93f1da3ce5
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -3,9 +3,12 @@
|
|
3
3
|
[![Build results](http://img.shields.io/travis/sj26/rspec_junit_formatter/master.svg)](https://travis-ci.org/sj26/rspec_junit_formatter)
|
4
4
|
[![Gem version](http://img.shields.io/gem/v/rspec_junit_formatter.svg)](https://rubygems.org/gems/rspec_junit_formatter)
|
5
5
|
|
6
|
-
[RSpec][rspec] 2 & 3 results that [Jenkins][jenkins]
|
6
|
+
[RSpec][rspec] 2 & 3 results that your CI can read. [Jenkins][jenkins-junit], [Buildkite][buildkite-junit], [CircleCI][circleci-junit], and probably more, too.
|
7
7
|
|
8
|
-
|
8
|
+
[rspec]: http://rspec.info/
|
9
|
+
[jenkins-junit]: https://jenkins.io/doc/pipeline/steps/junit/
|
10
|
+
[buildkite-junit]: https://github.com/buildkite/rspec-junit-example
|
11
|
+
[circleci-junit]: https://circleci.com/docs/2.0/collect-test-data/
|
9
12
|
|
10
13
|
## Usage
|
11
14
|
|
@@ -29,6 +32,8 @@ You can use it in combination with other [formatters][rspec-formatters], too:
|
|
29
32
|
rspec --format progress --format RspecJunitFormatter --out rspec.xml
|
30
33
|
```
|
31
34
|
|
35
|
+
[rspec-formatters]: https://relishapp.com/rspec/rspec-core/v/3-6/docs/formatters
|
36
|
+
|
32
37
|
### Using in your project with Bundler
|
33
38
|
|
34
39
|
Add it to your Gemfile if you're using [Bundler][bundler]. Put it in the same groups as rspec.
|
@@ -46,6 +51,8 @@ Put the same arguments as the commands above in [your `.rspec`][rspec-file]:
|
|
46
51
|
--format RspecJunitFormatter
|
47
52
|
--out rspec.xml
|
48
53
|
```
|
54
|
+
[bundler]: https://bundler.io
|
55
|
+
[rspec-file]: https://relishapp.com/rspec/rspec-core/v/3-6/docs/configuration/read-command-line-configuration-options-from-files
|
49
56
|
|
50
57
|
### Parallel tests
|
51
58
|
|
@@ -58,17 +65,45 @@ For use with `parallel_tests`, add `$TEST_ENV_NUMBER` in the output file option
|
|
58
65
|
|
59
66
|
The formatter includes `$TEST_ENV_NUMBER` in the test suite name within the XML, too.
|
60
67
|
|
68
|
+
### Capturing output
|
69
|
+
|
70
|
+
If you like, you can capture the standard output and error streams of each test into the `:stdout` and `:stderr` example metadata which will be added to the junit report, e.g.:
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
# spec_helper.rb
|
74
|
+
|
75
|
+
RSpec.configure do |config|
|
76
|
+
# register around filter that captures stdout and stderr
|
77
|
+
config.around(:each) do |example|
|
78
|
+
$stdout = StringIO.new
|
79
|
+
$stderr = StringIO.new
|
80
|
+
|
81
|
+
example.run
|
82
|
+
|
83
|
+
example.metadata[:stdout] = $stdout.string
|
84
|
+
example.metadata[:stderr] = $stderr.string
|
85
|
+
|
86
|
+
$stdout = STDOUT
|
87
|
+
$stderr = STDERR
|
88
|
+
end
|
89
|
+
end
|
90
|
+
```
|
91
|
+
|
61
92
|
## Caveats
|
62
93
|
|
63
94
|
* XML can only represent a [limited subset of characters][xml-charsets] which excludes null bytes and most control characters. This gem will use character entities where possible and fall back to replacing invalid characters with Ruby-like escape codes otherwise. For example, the null byte becomes `\0`.
|
64
95
|
|
96
|
+
[xml-charsets]: https://www.w3.org/TR/xml/#charsets
|
97
|
+
|
65
98
|
## Roadmap
|
66
99
|
|
67
100
|
* It would be nice to split things up into individual test suites, although would this correspond to example groups? The subject? The spec file? Not sure yet.
|
68
101
|
|
69
102
|
## Development
|
70
103
|
|
71
|
-
Run the specs with `bundle exec rake
|
104
|
+
Run the specs with `bundle exec rake`, which uses [Appraisal][appraisal] to run the specs against all supported versions of rspec.
|
105
|
+
|
106
|
+
[appraisal]: https://github.com/thoughtbot/appraisal
|
72
107
|
|
73
108
|
## Releasing
|
74
109
|
|
@@ -76,16 +111,12 @@ Bump the gem version in the gemspec, and commit. Then `bundle exec rake build` t
|
|
76
111
|
|
77
112
|
## License
|
78
113
|
|
79
|
-
The MIT License, see [LICENSE]
|
114
|
+
The MIT License, see [LICENSE](./LICENSE).
|
115
|
+
|
116
|
+
## Thanks
|
117
|
+
|
118
|
+
Inspired by the work of [Diego Souza][dgvncsz0f] on [RSpec Formatters][dgvncsz0f/rspec_formatters] after frustration with [CI Reporter][ci_reporter].
|
80
119
|
|
81
|
-
[rspec]: http://rspec.info/
|
82
|
-
[rspec-formatters]: https://relishapp.com/rspec/rspec-core/v/3-6/docs/formatters
|
83
|
-
[rspec-file]: https://relishapp.com/rspec/rspec-core/v/3-6/docs/configuration/read-command-line-configuration-options-from-files
|
84
|
-
[jenkins]: http://jenkins-ci.org/
|
85
120
|
[dgvncsz0f]: https://github.com/dgvncsz0f
|
86
121
|
[dgvncsz0f/rspec_formatters]: https://github.com/dgvncsz0f/rspec_formatters
|
87
122
|
[ci_reporter]: https://github.com/nicksieger/ci_reporter
|
88
|
-
[bundler]: http://gembundler.com/
|
89
|
-
[fuubar]: http://jeffkreeftmeijer.com/2010/fuubar-the-instafailing-rspec-progress-bar-formatter/
|
90
|
-
[license]: https://github.com/sj26/rspec-junit-formatter/blob/master/LICENSE
|
91
|
-
[xml-charsets]: https://www.w3.org/TR/xml/#charsets
|
@@ -71,9 +71,24 @@ private
|
|
71
71
|
output << %{ time="#{escape("%.6f" % duration_for(example))}"}
|
72
72
|
output << %{>}
|
73
73
|
yield if block_given?
|
74
|
+
xml_dump_output(example)
|
74
75
|
output << %{</testcase>\n}
|
75
76
|
end
|
76
77
|
|
78
|
+
def xml_dump_output(example)
|
79
|
+
if (stdout = stdout_for(example)) && !stdout.empty?
|
80
|
+
output << %{<system-out>}
|
81
|
+
output << escape(stdout)
|
82
|
+
output << %{</system-out>}
|
83
|
+
end
|
84
|
+
|
85
|
+
if (stderr = stderr_for(example)) && !stderr.empty?
|
86
|
+
output << %{<system-err>}
|
87
|
+
output << escape(stderr)
|
88
|
+
output << %{</system-err>}
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
77
92
|
# Inversion of character range from https://www.w3.org/TR/xml/#charsets
|
78
93
|
ILLEGAL_REGEXP = Regexp.new(
|
79
94
|
"[^" <<
|
@@ -69,4 +69,12 @@ private
|
|
69
69
|
def group_and_parent_groups(example)
|
70
70
|
example.example_group.parent_groups + [example.example_group]
|
71
71
|
end
|
72
|
+
|
73
|
+
def stdout_for(example)
|
74
|
+
example.metadata[:stdout]
|
75
|
+
end
|
76
|
+
|
77
|
+
def stderr_for(example)
|
78
|
+
example.metadata[:stderr]
|
79
|
+
end
|
72
80
|
end
|
@@ -122,6 +122,14 @@ private
|
|
122
122
|
yield
|
123
123
|
end
|
124
124
|
end
|
125
|
+
|
126
|
+
def stdout_for(example_notification)
|
127
|
+
example_notification.example.metadata[:stdout]
|
128
|
+
end
|
129
|
+
|
130
|
+
def stderr_for(example_notification)
|
131
|
+
example_notification.example.metadata[:stderr]
|
132
|
+
end
|
125
133
|
end
|
126
134
|
|
127
135
|
# rspec-core 3.0.x forgot to mark this as a module function which causes:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec_junit_formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.0
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Cochran
|
@@ -28,7 +28,7 @@ cert_chain:
|
|
28
28
|
P4lSfmXxsd1C71ckIp0cyXkPhyTtpyS/5hq9HhuUNzEHkSDe36/Rd1xYKV5JxMC2
|
29
29
|
YAttWFUs06lor2q1wwncPaMtUtbWwW35+1IV6xhs2rFY6DD/I6ZkK3GnHdY=
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date:
|
31
|
+
date: 2018-05-26 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rspec-core
|
@@ -60,58 +60,78 @@ dependencies:
|
|
60
60
|
name: bundler
|
61
61
|
requirement: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
|
-
- - "
|
63
|
+
- - ">="
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: '
|
65
|
+
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
|
-
- - "
|
70
|
+
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: '
|
72
|
+
version: '0'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: appraisal
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
type: :development
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
73
87
|
- !ruby/object:Gem::Dependency
|
74
88
|
name: nokogiri
|
75
89
|
requirement: !ruby/object:Gem::Requirement
|
76
90
|
requirements:
|
77
91
|
- - "~>"
|
78
92
|
- !ruby/object:Gem::Version
|
79
|
-
version: '1.
|
93
|
+
version: '1.8'
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.8.2
|
80
97
|
type: :development
|
81
98
|
prerelease: false
|
82
99
|
version_requirements: !ruby/object:Gem::Requirement
|
83
100
|
requirements:
|
84
101
|
- - "~>"
|
85
102
|
- !ruby/object:Gem::Version
|
86
|
-
version: '1.
|
103
|
+
version: '1.8'
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 1.8.2
|
87
107
|
- !ruby/object:Gem::Dependency
|
88
108
|
name: rake
|
89
109
|
requirement: !ruby/object:Gem::Requirement
|
90
110
|
requirements:
|
91
|
-
- - "
|
111
|
+
- - ">="
|
92
112
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
113
|
+
version: '0'
|
94
114
|
type: :development
|
95
115
|
prerelease: false
|
96
116
|
version_requirements: !ruby/object:Gem::Requirement
|
97
117
|
requirements:
|
98
|
-
- - "
|
118
|
+
- - ">="
|
99
119
|
- !ruby/object:Gem::Version
|
100
|
-
version: '
|
120
|
+
version: '0'
|
101
121
|
- !ruby/object:Gem::Dependency
|
102
122
|
name: coderay
|
103
123
|
requirement: !ruby/object:Gem::Requirement
|
104
124
|
requirements:
|
105
|
-
- - "
|
125
|
+
- - ">="
|
106
126
|
- !ruby/object:Gem::Version
|
107
|
-
version: '
|
127
|
+
version: '0'
|
108
128
|
type: :development
|
109
129
|
prerelease: false
|
110
130
|
version_requirements: !ruby/object:Gem::Requirement
|
111
131
|
requirements:
|
112
|
-
- - "
|
132
|
+
- - ">="
|
113
133
|
- !ruby/object:Gem::Version
|
114
|
-
version: '
|
134
|
+
version: '0'
|
115
135
|
description: RSpec results that your continuous integration service can read.
|
116
136
|
email: sj26@sj26.com
|
117
137
|
executables: []
|
@@ -143,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
163
|
version: 2.0.0
|
144
164
|
requirements: []
|
145
165
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
166
|
+
rubygems_version: 2.7.5
|
147
167
|
signing_key:
|
148
168
|
specification_version: 4
|
149
169
|
summary: RSpec JUnit XML formatter
|
metadata.gz.sig
CHANGED
Binary file
|