AWS Developer Tools Blog
From Minitest::Spec to Minitest::Test
In a previous blog post, I introduced Minitest from the perspective of RSpec. Some Minitest users prefer to avoid the specification style of Minitest::Spec
. Instead they use Minitest::Test
. It’s closer to the metal and uses a more vanilla Ruby syntax.
Here is an example spec file using Minitest::Spec
:
require 'spec_helper' describe MyClass do describe '#some_method' do it 'returns a string' do MyClass.new.some_method.must_be_kind_of(String) end end end
Converting this to use Minitest::Test looks like:
require 'test_helper' class MyClassTest < Minitest::Test def test_some_method_returns_a_string assert_kind_of String, MyClass.new.some_method end end
Some key differences:
-
Assertions are instance methods provided by the test class. Instead of calling magic methods added to Object, you pass the object under test into the assertion. Example:
value.must_be_kind_of(String)
becomes:
assert_kind_of(String, value)
-
There is no DSL for defining test cases. The
it
method is removed. Instead, all methods prefixed withtest_
are executed as test cases. -
Nesting
describe
blocks is a useful technique for grouping specs. You can still do this, but you have to nest test classes.class MyClassTest < Minitest::Test class SubClassTest < Minitest::Test ... end end
I don’t feel as strongly as others about using vanilla Minitest::Test
over Minitest::Spec
. I personally find the specs easier to read, but that may be due to my experience with RSpec. You may have a different experience based on your testing background.
Happy Testing!