Integrating with Minitest

To use rspec-mocks with minitest, simply require rspec/mocks/minitest_integration.

Use rspec-mocks with Minitest::Test

Given a file named “test/rspecmockstest.rb” with:

require 'minitest/autorun'
require 'rspec/mocks/minitest_integration'

class RSpecMocksTest < Minitest::Test
  def test_passing_positive_expectation
    dbl = double
    expect(dbl).to receive(:message)
    dbl.message
  end

  def test_failing_positive_expectation
    dbl = double
    expect(dbl).to receive(:message)
  end

  def test_passing_negative_expectation
    dbl = double
    expect(dbl).to_not receive(:message)
  end

  def test_failing_negative_expectation
    dbl = double
    expect(dbl).to_not receive(:message)
    dbl.message
  end

  def test_passing_positive_spy_expectation
    bond = spy
    bond.james
    expect(bond).to have_received(:james)
  end

  def test_failing_positive_spy_expectation
    bond = spy
    expect(bond).to have_received(:james)
  end

  def test_passing_negative_spy_expectation
    bond = spy
    expect(bond).not_to have_received(:james)
  end

  def test_failing_negative_spy_expectation
    bond = spy
    bond.james
    expect(bond).not_to have_received(:james)
  end
end

When I run ruby test/rspec_mocks_test.rb --seed 0

Then it should fail with the following output:

1) Failure:
RSpecMocksTest#testfailingpositive_expectation
(Double (anonymous)).message(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
2) Failure:
RSpecMocksTest#testfailingnegative_expectation
(Double (anonymous)).message(no args)
expected: 0 times with any arguments
received: 1 time
3) Failure:
RSpecMocksTest#testfailingpositivespyexpectation
(Double (anonymous)).james(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
4) Failure:
RSpecMocksTest#testfailingnegativespyexpectation
(Double (anonymous)).james(no args)
expected: 0 times with any arguments
received: 1 time
8 runs, 0 assertions, 4 failures, 0 errors, 0 skips

Use rspec-mocks with Minitest::Spec

Given a file named “spec/rspecmocksspec.rb” with:

require 'minitest/autorun'
require 'minitest/spec'
require 'rspec/mocks/minitest_integration'

describe "Minitest Spec integration" do
  it 'passes a positive expectation' do
    dbl = double
    expect(dbl).to receive(:message)
    dbl.message
  end

  it 'fails a positive expectation' do
    dbl = double
    expect(dbl).to receive(:message)
  end

  it 'passes a negative expectation (using to_not)' do
    dbl = double
    expect(dbl).to_not receive(:message)
  end

  it 'fails a negative expectation (using not_to)' do
    dbl = double
    expect(dbl).not_to receive(:message)
    dbl.message
  end
end

When I run ruby spec/rspec_mocks_spec.rb --seed 0

Then it should fail with the following output:

1) Failure:
Minitest Spec integration#test0002fails a positive expectation
(Double (anonymous)).message(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
2) Failure:
Minitest Spec integration#test0004fails a negative expectation (using not_to)
(Double (anonymous)).message(no args)
expected: 0 times with any arguments
received: 1 time
4 runs, 4 assertions, 2 failures, 0 errors, 0 skips

Load rspec-mocks before rspec-expectations, with Minitest::Spec

Given a file named “spec/rspecmocksspec.rb” with:

require 'minitest/autorun'
require 'minitest/spec'
require 'rspec/mocks/minitest_integration'
require 'rspec/expectations/minitest_integration'

describe "Minitest Spec integration" do
  it 'passes a positive expectation' do
    dbl = double
    expect(dbl).to receive(:message)
    dbl.message
  end

  it 'fails a positive expectation' do
    dbl = double
    expect(dbl).to receive(:message)
  end

  it 'passes a negative expectation (using to_not)' do
    dbl = double
    expect(dbl).to_not receive(:message)
  end

  it 'fails a negative expectation (using not_to)' do
    dbl = double
    expect(dbl).not_to receive(:message)
    dbl.message
  end

  it 'can use both minitest and rspec expectations' do
    expect(1 + 3).must_equal 4
    expect(1 + 3).to eq 4
  end
end

When I run ruby spec/rspec_mocks_spec.rb --seed 0

Then it should fail with the following output:

1) Failure:
Minitest Spec integration#test0002fails a positive expectation
(Double (anonymous)).message(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
2) Failure:
Minitest Spec integration#test0004fails a negative expectation (using not_to)
(Double (anonymous)).message(no args)
expected: 0 times with any arguments
received: 1 time
5 runs, 6 assertions, 2 failures, 0 errors, 0 skips

Load rspec-mocks after rspec-expectations, with Minitest::Spec

Given a file named “spec/rspecmocksspec.rb” with:

require 'minitest/autorun'
require 'minitest/spec'
require 'rspec/expectations/minitest_integration'
require 'rspec/mocks/minitest_integration'

describe "Minitest Spec integration" do
  it 'passes a positive expectation' do
    dbl = double
    expect(dbl).to receive(:message)
    dbl.message
  end

  it 'fails a positive expectation' do
    dbl = double
    expect(dbl).to receive(:message)
  end

  it 'passes a negative expectation (using to_not)' do
    dbl = double
    expect(dbl).to_not receive(:message)
  end

  it 'fails a negative expectation (using not_to)' do
    dbl = double
    expect(dbl).not_to receive(:message)
    dbl.message
  end

  it 'can use both minitest and rspec expectations' do
    expect(1 + 3).must_equal 4
    expect(1 + 3).to eq 4
  end
end

When I run ruby spec/rspec_mocks_spec.rb --seed 0

Then it should fail with the following output:

1) Failure:
Minitest Spec integration#test0002fails a positive expectation
(Double (anonymous)).message(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
2) Failure:
Minitest Spec integration#test0004fails a negative expectation (using not_to)
(Double (anonymous)).message(no args)
expected: 0 times with any arguments
received: 1 time
5 runs, 6 assertions, 2 failures, 0 errors, 0 skips