<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>andthennothing.net: Logging in tests in Rails</title>
  <subtitle type="html">&amp;ldquo;first there was a three-legged monkey...&amp;rdquo;</subtitle>
  <id>tag:andthennothing.net,2005:Typo</id>
  <generator uri="http://typo.leetsoft.com" version="4.0">Typo</generator>
  <link href="http://andthennothing.net/xml/atom10/article/448/feed.xml" rel="self" type="application/xml+atom"/>
  <link href="http://andthennothing.net/archives/2005/12/11/logging-in-tests-in-rails" rel="alternate" type="text/html"/>
  <updated>2005-12-18T03:19:09+00:00</updated>
  <entry>
    <author>
      <name>Jonas Bengtsson</name>
      <email>jonas.b@home.se</email>
    </author>
    <id>urn:uuid:ebd7fb9f-f408-4e26-89f6-f5786bb7a50f</id>
    <published>2005-12-11T00:38:00+00:00</published>
    <updated>2005-12-18T03:19:09+00:00</updated>
    <title>Logging in tests in Rails</title>
    <link href="http://andthennothing.net/archives/2005/12/11/logging-in-tests-in-rails" rel="alternate" type="text/html"/>
    <category term="ruby" scheme="http://andthennothing.net/tags/448"/>
    <category term="rails" scheme="http://andthennothing.net/tags/448"/>
    <category term="tdd" scheme="http://andthennothing.net/tags/448"/>
    <content type="html">&lt;p&gt;To use the logger in tests in Rails is fairly simple, you can access the logger with &lt;tt&gt;&lt;span class="caps"&gt;RAILS&lt;/span&gt;_DEFAULT_LOGGER&lt;/tt&gt;. However, the &lt;tt&gt;test.log&lt;/tt&gt; file gets a little hard to read since you don&amp;#8217;t know which test method generated the messages. This is a problem even if you don&amp;#8217;t use the logger manually if you for example want to look at the &lt;span class="caps"&gt;SQL&lt;/span&gt; statements.&lt;/p&gt;


	&lt;p&gt;The following snippet generates a log message when each test method is called and one message when the test method is done. To use it you need to include the snippet in &lt;tt&gt;test_helper.rb&lt;/tt&gt; and add &lt;tt&gt;log_test_methods&lt;/tt&gt; in &lt;em&gt;the end of your test class&lt;/em&gt; (I couldn&amp;#8217;t figure out a better way to solve it).&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Test::Unit::TestCase&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.log_test_methods&lt;/span&gt;
    &lt;span class="ident"&gt;class_eval&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;test_methods&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;instance_methods&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;select&lt;/span&gt; &lt;span class="punct"&gt;{|&lt;/span&gt;&lt;span class="ident"&gt;m&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; &lt;span class="ident"&gt;m&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;match&lt;/span&gt;&lt;span class="punct"&gt;(/&lt;/span&gt;&lt;span class="regex"&gt;^test&lt;/span&gt;&lt;span class="punct"&gt;/)}&lt;/span&gt;
      &lt;span class="ident"&gt;test_methods&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;each&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;method&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
        &lt;span class="ident"&gt;alias_method&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;orig_&lt;span class="expr"&gt;#{method}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="ident"&gt;method&lt;/span&gt;
        &lt;span class="ident"&gt;define_method&lt;/span&gt; &lt;span class="ident"&gt;method&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
          &lt;span class="keyword"&gt;begin&lt;/span&gt;
            &lt;span class="constant"&gt;RAILS_DEFAULT_LOGGER&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;info&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;span class="expr"&gt;#{method}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
            &lt;span class="ident"&gt;send&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;orig_&lt;span class="expr"&gt;#{method}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
            &lt;span class="constant"&gt;RAILS_DEFAULT_LOGGER&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;info&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;&amp;lt;&amp;lt; &lt;span class="expr"&gt;#{method}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
          &lt;span class="keyword"&gt;rescue&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;e&lt;/span&gt;
            &lt;span class="constant"&gt;RAILS_DEFAULT_LOGGER&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;info&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;&amp;lt;&amp;lt; &lt;span class="expr"&gt;#{method}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
            &lt;span class="keyword"&gt;raise&lt;/span&gt; &lt;span class="ident"&gt;e&lt;/span&gt;
          &lt;span class="keyword"&gt;end&lt;/span&gt;
        &lt;span class="keyword"&gt;end&lt;/span&gt;
      &lt;span class="keyword"&gt;end&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content>
  </entry>
</feed>
