Minitest::Utils
Some utilities for your Minitest day-to-day usage.
Includes:
- A better reporter (see screenshot below)
- A TestNotifier reporter
- Some Rails niceties (set up FactoryBot, WebMock and Capybara)
- Add a
tandlmethods (i18n)
Installation
Add this line to your application's Gemfile:
gem 'minitest-utils'And then execute:
$ bundle
Or install it yourself as:
$ gem install minitest-utils
Defining tests
This gem adds the Minitest::Test.test method, so you can easy define your
methods like the following:
class SampleTest < Minitest::Test
test "useless test" do
assert true
end
endThis is equivalent to defining a method named test_useless_test. You can also
skip the block, which will define a
flunk
call.
You can also define setup and teardown steps.
class SampleTest < Minitest::Test
setup do
DB.connect
end
teardown do
DB.disconnect
end
test "useless test" do
assert true
end
endIf you want to skip slow tests, you can use the slow_test method, which only
runs the test when MT_RUN_SLOW_TESTS environment variable is set.
# Only run slow tests in CI. You can bypass it locally by using
# something like `MT_RUN_SLOW_TESTS=1 rake`.
ENV["MT_RUN_SLOW_TESTS"] ||= ENV["CI"]
class SampleTest < Minitest::Test
test "useless test" do
slow_test
sleep 1
assert true
end
endYou can change the default threshold by setting Minitest::Test.slow_threshold.
The default value is 0.1 (100ms).
Minitest::Test.slow_threshold = 0.1This config can also be changed per class:
class SampleTest < Minitest::Test
self.slow_threshold = 0.1
test "useless test" do
slow_test
sleep 1
assert true
end
endFinally, you can also use let.
class SampleTest < Minitest::Test
let(:token) { "secret" }
test "set token" do
assert_equal "secret", token
end
endRunning tests
minitest-utils comes with a runner: mt or minitest.
Warning
When using this test runner, you must change your test helper and replace
require "minitest/autorun" with
require "minitest/autorun" unless ENV["MT_RUNNER"]. This way you can use
both the runner and rake.
You can run specific files by using file:number.
$ mt test/models/user_test.rb:42You can also run files by the test name (caveat: you need to underscore the name):
$ mt test/models/user_test.rb --name /validations/You can also run specific directories:
$ mt test/modelsTo exclude tests by name, use --exclude:
$ mt test/models --exclude /validations/It supports .minitestignore, which only matches file names partially. Comments
starting with # are ignored.
# Ignore all tests in test/fixtures
test/fixtures
Note
This command is also available as the long form minitest, for linux users.
Linux has a mt command for managing magnetic tapes.
Screenshots
Rails extensions
minitest-utils sets up some things for your Rails application.
-
Capybara: includes
Capybara::DSL, sets default driver before every test, resets session and creates a helper method for setting JavaScript driver. If you have poltergeist installed, it will be used as the default JavaScript driver. -
FactoryBot: adds methods to
ActiveSupport::TestCase. -
WebMock: disables external requests
(except for codeclimate) and tracks all requests on
WebMock.requests. - locale routes: sets
Rails.application.routes.default_url_options[:locale]with your current locale. -
DatabaseCleaner:
configure database before running each test. You can configure the strategy by
settings
DatabaseCleaner.strategy = :truncation, for instance. It defaults to:deletion. - Other:
tandlalias to I18n.
class SignupTest < ActionDispatch::IntegrationTtest
use_javascript! #=> enables JavaScript driver
endAlso, if you're using routes like :locale scope, you can load this file to
automatically set your route's :locale param.
require 'minitest/utils/rails/locale'Development
After checking out the repo, run bin/setup to install dependencies. Then, run
bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To
release a new version, update the version number in version.rb, and then run
bundle exec rake release to create a git tag for the version, push git commits
and tags, and push the .gem file to rubygems.org.
Contributing
- Fork it ( https://github.com/fnando/minitest-utils/fork )
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request


