TAP-Y/J Output Formats for MiniTest
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
demo
lib
var
work
.gemspec
.gitignore
.index
.travis.yml
.yardopts
Assembly
Gemfile
HISTORY.md
LICENSE.txt
MANIFEST
NOTICE.md
README.md

README.md

Minitap

Website | Documentation | Report Issue | Source Code

Build Status Gem Version     Flattr Me

About

The MiniTap project provides a TAP-Y and TAP-J output reporters for the MiniTest test framework --the test framework that comes standard with Ruby 1.9+.

See TAPOUT for more information about TAP-Y/J formats.

Usage

Minitest 5

Minitest 5 has a new report system and plug-in API. Minitap takes advantage of this new API to allow the TAP-Y or TAP-J formats to be selected via command-line options as an alternative to setting the format in test helper scripts.

Via Command Line

To use simply add --tapy or --tapj after an isolated - separator on the ruby test command invocation, e.g.

$ ruby -Ilib test/runner.rb - --tapy

In your test helper scripts be sure you have the standard Minitest line:

require 'minitest/autorun'

And remove any old MiniTest::Unit.runner= assignments if you are migrating from v4.

Now to do something interesting with the TAP-Y/J output, you will probably want to install tapout:

$ gem install tapout

Then pipe the output to the tapout command, e.g.

$ ruby test/some_test.rb - --tapy | tapout progressbar

Via Helper Script

To use via test helper script, require the minitap library after minitest/autorun and assign Minitest.reporter to the Minitap reporter to be used.

require "minitest/autorun"
require "minitap"

Minitest.reporter = Minitap::TapY

Then pipe the output to the tapout command, e.g.

$ ruby -Ilib test/runner.rb | tapout progrssbar

Or using Rake:

$ rake test | tapout progressbar

You may need the -q option for Rake to supress extraneous output.

MiniTest 4

If you are still using MiniTest 4.x you will need to use Minitap version 4.x as well. In your dependencies be sure to specify this version. For example in your Gemfile:

gem "minitap", "~> 0.4.0"

For Minitest 4 and and older, custom report formats are set by assigning the MiniTest::Unit.runner to an instance of a custom runner class. In our case we want to set it to an instance of MiniTest::TapY or MiniTest::TapJ. So in your project's test helper script add, e.g.

require 'minitap'
MiniTest::Unit.runner = MiniTest::TapY.new

Now you may want to set this up so it is selectable. In which case use an environment variable.

MiniTest::Unit.runner = \
  case ENV['rpt']
  when 'tapy'
    MiniTest::TapY.new
  when 'tapj'
    MiniTest::TapJ.new
  end

Then you can do, e.g.

$ rpt=tapy ruby test/some_test.rb

Now to do something interesting with the TAP-Y/J output, you will probably want to install tapout:

$ gem install tapout

Then pipe the output to the tapout command, e.g.

$ rpt=tapy ruby test/some_test.rb | tapout progressbar

Using Pry & Other Tools

Becuase Tapout communicates with Minitest via a shell pipe it is improtant to keep in mind that any non TAP-Y/J output that tapout receives might force it to halt. To ensure this doesn't occur a pause code (16.chr) can be sent over the pipe to instruct the tapout comamnd to stop processing test results and route $stdin directly to $stdout instead. A resume code (23.chr) can be sent to restart test result processing.

A good example of this is when using binding.pry for debugging. To do so while using tapout:

require 'tapout/utility'
tapout.pause{ binding.pry }

Or, even more convenient, specifically for use with pry:

require 'tapout/utility'
tapout.pry(binding)

Which is a more covenient way of coding:

STDOUT.puts 16.chr
binding.pry
STDOUT.puts 23.chr

Copying

Copyright (c) 2011 Rubyworks

Made available under the terms of the BSD-2-Clause license.

Portions of this program were drawn from Alexander Kern's MiniTest Reporter (c) 2011 Alexander Kern. Thanks Alexander for making my endeavor a little bit easier.

See COPYING.rdoc for copyright and licensing details.