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
itmethod is removed. Instead, all methods prefixed withtest_are executed as test cases. -
Nesting
describeblocks 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!