Rails, Logger, and those pesky Tests
16 comments Latest by pandora jewelry Thu, 18 Mar 2010 07:57:48 GMT
First of all, I would like to thank all of you who took a moment to gather around the campfire with me and share your stuff. That was much appreciated.

So, I started playing with the idea of logging in unit and functional tests and I quickly realized that calling logger.info wasn’t an option. What’s the deal-e-o? Before I gather up my posse and conspire a train hijacking, I decided that I would see how quickly I could solve my problem before I called you all out to the Rio Rails Grande for an old-fashioned shoot out. Ya know, the kind that results in a Bon Jovi song and a little blood.
- A) my holster was eaten by my dog and
- B) I found a quick solution to clean up this
loggersituation.
Okay… are you ready?
I know… this is totally groundbreaking!!!
Open up test/test_helper.rb and add the method… logger.
# other stuff at the top of the file... just
# look down below at def logger
class Test::Unit::TestCase
self.use_transactional_fixtures = true
self.use_instantiated_fixtures = false
# here... look here! right below this
def logger
RAILS_DEFAULT_LOGGER
end
endSave that and pick up your pistol…
The next step is to call the logger method in your unit and functional tests.
def test_the_obvious
logger.info( 'asserting that 1 is 1' )
assert 1, 1
endI posted this on Rails Weenie as well.
Enjoying the content? Be sure to subscribe to my RSS feed.






Maybe you posted this in another blog, but I’m curious as to why you’d want logging in unit tests. It’s not like you’re getting diagnostic info from your app in development mode that you don’t want filling up your production logs..simple puts statements should do the trick in unit tests, shouldn’t they?
My god the ground is breaking beneath my feet, only yesterday was I wondering how to do this.
I am also wondering why logging would be important in tests. I use $stdout.puts statements right now if I need to know anything.
But that was a smart idea ;)
I find that when I’m testing some more complex units of test and want to get some information about what is happening before and after each database interaction… having some of my own text help break things out gives me clarity. :-)
You want logging in unit tests so you can help debug what went wrong when a problem is found. Logging is for always.
Sweet.
Now you can also get your assert messages for failures to log by adding this to the end of your helper.
module Test module Unit module Assertions alias_method :assert_block_original, :assert_block def assert_block(message="assert_block failed.", &block) begin assert_block_original(message, &block) rescue AssertionFailedError => error logger.info(message.to_s) raise error end end end end endThanks a lot! Saved me a huge headache. Immediate use for the logger was to store a very long output string of a function so that I could write testcases for it.
http://adbrssgfsfrge.host.com desk3 [url=http://adbsssgfsfrge.host.com]desk4[/url] [link=http://adbassgfsfrge.host.com]desk6[/link]
While this is cool and could be useful, one could also go the puts way and do this: rake test > log.log Yathink?
Satya, if you do that, your database statements and log messages will be in separate files. Not good. Personally, I find it a lot more useful when they’re in the same file so you can see the log messages and database statements in the order they were executed.
Thanks, solved a problem quickly with this bit of info
Thanks for this. I may be late to the thread party, but this is exactly what I was looking for.
Heed the statements of sb, for that is why you want to use Logger.
4 years later, this is still helping a brutha out. Thanks!
Thank you for your post!
good sharing