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
t
andl
methods (i18n)
Add this line to your application's Gemfile:
gem 'minitest-utils'
And then execute:
$ bundle
Or install it yourself as:
$ gem install minitest-utils
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
end
This 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
end
If 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
end
You can change the default threshold by setting Minitest::Test.slow_threshold
.
The default value is 0.1
(100ms).
Minitest::Test.slow_threshold = 0.1
This 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
end
Finally, you can also use let
.
class SampleTest < Minitest::Test
let(:token) { "secret" }
test "set token" do
assert_equal "secret", token
end
end
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:42
You 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/models
To 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.
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:
t
andl
alias to I18n.
class SignupTest < ActionDispatch::IntegrationTtest
use_javascript! #=> enables JavaScript driver
end
Also, 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'
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.
- 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