Converts minitest files to rspec
Ruby
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

README.md

MinitestToRspec

Converts minitest files to rspec.

Build Status

Example

Input:

require 'test_helper'
class ArrayTest < ActiveSupport::TestCase
  test "changes length" do
    ary = []
    assert_difference "ary.length" do
      ary.push(:x)
    end
  end
end

Output:

require("spec_helper")
RSpec.describe(Array) do
  it("changes length") do
    ary = []
    expect { ary.push(:x) }.to(change { ary.length })
  end
end

You might not like the code style of the output. More on that below.

Install

gem install minitest_to_rspec

Usage

CLI

mt2rspec [--rails] [--mocha] source_file [target_file]
mt2rspec --help

Ruby

require 'minitest_to_rspec'
converter = MinitestToRspec::Converter.new(rails: false, mocha: false)
converter.convert("assert('banana')")
#=> "expect(\"banana\").to(be_truthy)"

Output

The only goal is correctness. Code style is not a consideration. Providing the level of configuration necessary to make everyone happy would be a huge distraction from the main purpose.

After conversion, I recommend using rubocop's awesome --auto-correct feature to apply your preferred code style.

Comments are discarded by ruby_parser, so we have no way of preserving them.

Supported Assertions

Selected assertions from minitest, Test::Unit, and ActiveSupport. See doc/supported_assertions.md for rationale. Contributions are welcome.

Assertion Arity Source
assert
assert_difference 1,2
assert_equal 2,3 Test::Unit
assert_not_equal 2,3 Test::Unit
assert_match
assert_nil
assert_not_nil
assert_no_difference ActiveSupport
assert_nothing_raised Test::Unit
assert_raise 0..2 Test::Unit
assert_raises 0..2 Minitest
refute
refute_equal
refute_raise
refute_raises

Supported Mocha

Mocha Arity Block Notes
any_instance 0 n/a
expects 1 n/a
once 0 n/a
stub 0,1,2 no
stub_everything 0,1,2 no Uses as_null_object, not the same.
stubs 1 n/a
twice 0 n/a

To do: at_least, never, raises, etc.

Supported shoulda-context methods

Mocha Arity Block Notes
context 1 yes
setup 1,2 no
should 1,2 yes

Acknowledgements

This project would not be possible without ruby_parser, sexp_processor, and ruby2ruby by Ryan Davis.