A Rails tale of caution: functional tests hanging with controllers in subdirectories
Posted by trevor Tue, 30 May 2006 23:27:05 GMT
This afternoon I was hit by a real headscratcher – documented here for future googlers looking for information on: functional tests hanging controllers subdirectories :-)
I added in some tests for controllers that were in a subdirectory (as in “./script/generate controller boo/hoo
“) and suddenly rake started hanging.
I could run individual functional tests just fine but as a suite – forget it.
The source of the problem turned out to be twofold:
- in test_helper.rb we alias the
get
andpost
test methods so that we can optionally capture all of our output and run it through a validator. - the require line that ./script/generate creates for loading test_helper.rb in your functional tests is relative to the current file’s directory. For functional tests in subdirectories you get a
require
argument ending with ”/../../test_helper” rather than the one ending with ”/../test_helper” as you do in top-level functional tests.
Even though those two different require lines point to the same file, from require’s perspective they are different – so the file is loaded twice.
And that’s a big no-no if you are doing a simple method alias without checks against doing it twice.
The bulletproof solution is to have tests use File.expand_path()
on the argument to require
. But if the generators keep spitting it out as they do now it’s one of those “pushing water uphill” situations. I smell a patch.
For now, I’m just wrapping my alias
calls with a check of self.instance_methods
to make sure the alias hasn’t already been done.