Method stub with MiniTest


MiniTest is a testing tool that provides the necessary resources to make your test suite a complete stack, supporting TDD, BDD, mocking and benchmarking. It comes by default with Ruby 1.9.x and is also available for Ruby 1.8.7.

It provides two styles of testing: Unit tests and Specs. I personally prefer Specs since they are easier to read. Find out more about this on the documentation site. If you’re not yet using it, I suggest you to give it a try. I have used it for writing unit, functional and integration tests and the results are amazing.

But that’s enough for the introduction of MiniTest since this is more to talk about how to stub methods using this tool.

So we basically have two options. The first approach is to do something like Aaron Patterson (a.k.a. @tenderlove) does on his PeepCode’s screencast. It’s something like this:

klass = User do
  define_method(:confirmed?) { true }
user =
user.confirmed?.must_equal true

What he basically is doing here is redifining the User class and assigning that redefinition to the variable klass. Within the definition block, he is also redifininig the confirmed? instance method for that class, so that when it is called, it returns whatever it is inside the block given to the define_method method, which in this case is a true value.

The second way to do this, which is cleaner, niftier, fancier and less complex is by using the MiniTest’s stub method:

User.stub :confirmed?, true do
  user = User.first
  user.confirmed?.must_equal true

Clear, precise and concise. This magic was not available until version 3.0.0 when they added support to this on this commit. Once again MiniTest impresses me by its incredible super cow powers.

comments powered by Disqus