Read my latest article: Launching Rails projects, an open call for lessons learned (posted Tue, 23 Jun 2009 17:33:00 GMT)

Rails, Logger, and those pesky Tests

Posted by Robby Russell Wed, 25 Jan 2006 22:06:00 GMT

12 comments Latest by Noah Stern Tue, 11 Nov 2008 01:53:15 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.

You’re all in luck because:
  • A) my holster was eaten by my dog and
  • B) I found a quick solution to clean up this logger situation.

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
end

Save 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
end

I posted this on Rails Weenie as well.

Subscribe to my RSS feed Enjoying the content? Be sure to subscribe to my RSS feed.
Comments

Leave a response

  1. Avatar
    Pat Wed, 25 Jan 2006 22:35:22 GMT

    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?

  2. Avatar
    Damien Tanner Thu, 26 Jan 2006 11:26:02 GMT

    My god the ground is breaking beneath my feet, only yesterday was I wondering how to do this.

  3. Avatar
    Mitch Fri, 27 Jan 2006 15:13:51 GMT

    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 ;)

  4. Avatar
    Robby Russell Fri, 27 Jan 2006 16:49:54 GMT Recommend me on Working with Rails

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

  5. Avatar
    logger Sun, 29 Jan 2006 15:16:43 GMT

    You want logging in unit tests so you can help debug what went wrong when a problem is found. Logging is for always.

  6. Avatar
    Victor Cosby Sat, 04 Feb 2006 03:22:32 GMT

    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
    end
    
  7. Avatar
    thankfully Mon, 13 Nov 2006 22:48:26 GMT

    Thanks 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.

  8. Avatar
    Waynebjp Tue, 14 Aug 2007 12:55:36 GMT

    http://adbrssgfsfrge.host.com desk3 [url=http://adbsssgfsfrge.host.com]desk4[/url] [link=http://adbassgfsfrge.host.com]desk6[/link]

  9. Avatar
    Satya Mon, 24 Sep 2007 13:05:43 GMT

    While this is cool and could be useful, one could also go the puts way and do this: rake test > log.log Yathink?

  10. Avatar
    sb Thu, 06 Dec 2007 20:37:04 GMT

    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.

  11. Avatar
    Carl Humphrey Wed, 12 Dec 2007 11:36:47 GMT

    Thanks, solved a problem quickly with this bit of info

  12. Avatar
    Noah Stern Tue, 11 Nov 2008 01:53:15 GMT

    Thanks for this. I may be late to the thread party, but this is exactly what I was looking for.

Share your thoughts... (really...I want to hear them)

Comments