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.