John Munsch
John Munsch

Reputation: 19528

Why is Rake running a model for which I can find no test?

When I run "rake", it's loading up one of the models among all of the classes I have in my app/models directory. The thing is, it's not one I have a test for, it's just a model I have in there that is actually used with script/runner to run in the background and perform tasks for my main Rails application. At the end of the file I've got it creating a new instance of the class above and then running main for the class.

Since it loops indefinitely I definitely do not want it started up by the testing code. Why would the unit testing or Rake involve this other class in any way?

To my shame, I haven't been writing any tests for this code and I decided I would start writing some, but this stopped me right away because I can't even run Rake for what is out there now without it going haywire.

Upvotes: 1

Views: 136

Answers (1)

Mike Woodhouse
Mike Woodhouse

Reputation: 52316

I'm not sure it's Rake's fault - I have a feeling that when you add :environment as a dependency, you're bringing up the whole Rails infrastructure, which may well involve requiring every model file (this is fairly wild guesswork - I haven't followed the boot process that deeply yet).

However it's happening, it seems that your model is being required, at which point all hell breaks loose.

Looking at script/runner and more usefully, railties/lb/commands/runner.rb, the execution sequence seems to be something like:

require 'boot' # boot the Rails app
eval(File.read(code_or_file)) # run what you asked for

That second line (it's actually around line 45 in runner.rb) looks like the key. How would it be if you defined a separate script (in /lib, say?) that contained the code that runs your model? I think that would probably be a more Rails-ish way to do it. And it would probably stop Rake messing up your tests...

Upvotes: 1

Related Questions