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 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.)
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?