Evgenii
Evgenii

Reputation: 37329

How to run code before each test case in all tests in MiniTest?

I need to run code before each test in all my tests in MiniTest.

Before I did:

MiniTest::Unit::TestCase.add_setup_hook do
   ...code to run before each test
end

After I upgraded MiniTest to version 4.7.2 it shows the following error:

undefined method `add_setup_hook' for MiniTest::Unit::TestCase:Class (NoMethodError)

I am using Ruby MRI 2.0.0p0.

SOLUTION

module MyMinitestPlugin
  def before_setup
    super
    # ...code to run before all test cases
  end

  def after_teardown
    # ... code to run after all test cases
    super
  end
end

class MiniTest::Unit::TestCase
  include MyMinitestPlugin
end

Upvotes: 10

Views: 7104

Answers (4)

akira
akira

Reputation: 482

If using MiniTest, you can set that in test/test_helper.rb:

class ActiveSupport::TestCase
...
    setup do
         ...code to run before each test
    end
end

Upvotes: 2

svoop
svoop

Reputation: 3454

Update 2019

Don't write a plugin for this, plugins are intended for gems which extend Minitest functionality, not for test authors.

If you write Minitest Specs, you can do the following instead:

class Minitest::Spec
  before :each do
    [do stuff]
  end
end

Upvotes: -2

lifus
lifus

Reputation: 8482

add_setup_hook was removed in 4.6.0. https://github.com/seattlerb/minitest/commit/792a480ebeb32983b9150adae575b7c396e2ae63

Use before_setup instead.

Upvotes: 6

Uko
Uko

Reputation: 13386

I think that you're looking for the setup() method.

Upvotes: 2

Related Questions