Dumb Moments

As a developer you face many situations where things will just not work, then you have a revelation that points to something so simple that you want to slap yourself.

I just had one today so profound I thought I’d share it with the public.

I wanted to have fun on my day off, but instead of going outside on the beautiful day, or doing some thing active like any sane person, I decided to play with FlexMock and Mocha.

I had my fun with FlexMock and was moving onto Mocha, when I encountered a strange yet irritating problem.

require "rubygems"
require "test/unit"
require "mocha"
require "others"

class OthersTest < Test::Unit::TestCase

  def test_foo
person = mock("person")
  end
end

I kept getting

E
Finished in 0.000419 seconds.

  1) Error:
test_foo(OthersTest):
NoMethodError: undefined method `mock' for #<OthersTest:0x110b5c4>

So I went over my gems to make sure they were installed correctly. Even grabbed a sample test file and that resulted in the same error.

So I edited the mocha.rb in the gem lib directory and added one of my Yoda-like scientific debugging techniques

puts "in here"

Still having problems. So I tweaked the test case a little to

require "rubygems"
require "test/unit"
require_gem "mocha"
require "others"

Success! … if you ignore the Deprecation Warning from rubygems. Warning: require_gem is obsolete. Use gem instead. Being a perfectionist, that irked me.

Wondering how this gem could hate me in particular yet spare everyone else it’s wrath, I stepped back and noticed the forest for the trees. The test’s filename was mocha.rb. An innocuous file name from a sleepy eyed programmer at 8 a.m. in the morning. (More support that coders shouldn’t touch a keyboard before 10 a.m.)

The original require "mocha" was seeming to ignore the gem because it was named the same, and of course I plopped the sample file in the same directory as the uglified test, so it wouldn’t grab the gem.

Why do Dumb Moments always last at least one hour?