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
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:
There is no DSL for defining test cases. The
itmethod is removed. Instead, all methods prefixed with
test_are executed as test cases.
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::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.