31

I read somewhere that 'minitest' is the "new test::unit for ruby 1.9.2+".

But ruby 1.9.3 seems to include both test::unit and minitest, is that true?

In the default rails testing, as outlined in the Rails testing guide.... things like ActiveSupport::TestCase, ActionController::TestCase, are these using Test::Unit or Minitest?

In the rails guide, it shows examples with tests defined like this:

test "should show post" do
  get :show, :id => @post.id
  assert_response :success
end

That syntax, test string, as opposed to defining methods with names like test_something -- isn't mentioned in the docs for either Test::Unit or Minitest. Where's that coming from? Is Rails adding it, or is it actually a part of... whatever testing lib rails is using?

PS: Please don't tell me "just use rspec". I know about rspec. I am trying to explore the stdlib alternatives, in the context of rails.

jrochkind
  • 22,799
  • 12
  • 59
  • 74

2 Answers2

19

There is a Test::Unit "compatibility" module that comes with Minitest, so that you can (presumably) use your existing Test::Unit tests as-is. This is probably the Test::Unit module you are seeing.

As of rails 3.2.3, generator-created tests include rails/test_help which includes test/unit.

The test "something" do syntax is a rails extension. It's defined in ActiveSupport::Testing::Declarative, which is require'd by rails/test_help.

bholtbholt
  • 11,281
  • 6
  • 22
  • 32
Michael Slade
  • 13,802
  • 2
  • 39
  • 44
  • 3
    The "compatiblity" mode is a joke - they don't bother matching up the assert* function naming conventions and it just goes downhill from there. – David W Jul 24 '13 at 20:18
5

This is perhaps a bit of a tangential response, but as to your rspec comment... You might want to take a look at minitest/spec which provides spec flavor syntax in stdlib in 1.9.x.

http://bfts.rubyforge.org/minitest/MiniTest/Spec.html

Travis
  • 472
  • 4
  • 10