class MinitestToRspec::Input::Subprocessors::Defn

Minitest tests can be defined as methods using names beginning with 'test_'. Process those tests into RSpec `it` example blocks.

Public Class Methods

new(sexp, rails, mocha) click to toggle source
# File lib/minitest_to_rspec/input/subprocessors/defn.rb, line 13
def initialize(sexp, rails, mocha)
  super(rails, mocha)
  @original = sexp.dup
  @exp = Model::Defn.new(sexp)
  sexp.clear
end

Public Instance Methods

process() click to toggle source

Using a `Model::Defn`, returns a `Sexp`

# File lib/minitest_to_rspec/input/subprocessors/defn.rb, line 21
def process
  if @exp.test_method?
    s(:iter,
      s(:call, nil, :it, s(:str, example_title)),
      0,
      example_block)
  elsif @exp.setup?
    s(:iter,
      s(:call, nil, :before),
      0,
      example_block
    )
  elsif @exp.teardown?
    s(:iter,
      s(:call, nil, :after),
      0,
      example_block
    )
  else
    @original
  end
end

Private Instance Methods

example_block() click to toggle source
# File lib/minitest_to_rspec/input/subprocessors/defn.rb, line 51
def example_block
  block = s(:block)
  @exp.body.each_with_object(block) do |line, blk|
    blk << process_line(line)
  end
end
example_title() click to toggle source

Remove 'test_' prefix and replace underscores with spaces

# File lib/minitest_to_rspec/input/subprocessors/defn.rb, line 47
def example_title
  @exp.method_name.sub(/^test_/, '').tr('_', ' ')
end
process_line(line) click to toggle source
# File lib/minitest_to_rspec/input/subprocessors/defn.rb, line 58
def process_line(line)
  Processor.new(@rails, @mocha).process(line)
end