rspec_junit_formatter
                                
                                
                                
                                    rspec_junit_formatter copied to clipboard
                            
                            
                            
                        RSpec results that your CI can read
RSpec JUnit Formatter
RSpec 2 & 3 results that your CI can read. Jenkins, Buildkite, CircleCI, Gitlab, and probably more, too.
Usage
Install the gem:
gem install rspec_junit_formatter
Use it:
rspec --format RspecJunitFormatter --out rspec.xml
You'll get an XML file rspec.xml with your results in it.
You can use it in combination with other formatters, too:
rspec --format progress --format RspecJunitFormatter --out rspec.xml
Using in your project with Bundler
Add it to your Gemfile if you're using Bundler. Put it in the same groups as rspec.
group :test do
  gem "rspec"
  gem "rspec_junit_formatter"
end
Put the same arguments as the commands above in your .rspec:
--format RspecJunitFormatter
--out rspec.xml
Parallel tests
For use with parallel_tests, add $TEST_ENV_NUMBER in the output file option (in .rspec or .rspec_parallel) to avoid concurrent process write conflicts.
--format RspecJunitFormatter
--out tmp/rspec<%= ENV["TEST_ENV_NUMBER"] %>.xml
The formatter includes $TEST_ENV_NUMBER in the test suite name within the XML, too.
Capturing output
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.:
# spec_helper.rb
RSpec.configure do |config|
  # register around filter that captures stdout and stderr
  config.around(:each) do |example|
    $stdout = StringIO.new
    $stderr = StringIO.new
    example.run
    example.metadata[:stdout] = $stdout.string
    example.metadata[:stderr] = $stderr.string
    $stdout = STDOUT
    $stderr = STDERR
  end
end
Note that this example captures all output from every example all the time, potentially interfering with local debugging. You might like to restrict this to only on CI, or by using rspec filters.
Caveats
- XML can only represent a limited subset of characters 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. 
Development
Run the specs with bundle exec rake, which uses Appraisal to run the specs against all supported versions of rspec.
Releasing
Bump the gem version in the gemspec, and commit. Then bundle exec rake build to build a gem package, bundle exec rake install to install and test it locally, then bundle exec rake release to tag and push the commits and gem.
License
The MIT License, see LICENSE.
Thanks
Inspired by the work of Diego Souza on RSpec Formatters after frustration with CI Reporter.