Friday, September 3, 2010

Use ActiveRecord::Base.logger.buffer in unit test

If you use ActiveRecord, sometimes you want to write a test to check the Sql statements that are actually used. This can be easily done with ActiveRecord::Base.logger.buffer:

  def test_what_sql_statements_are_used
    ActiveRecord::Base.logger.flush
    ActiveRecord::Base.logger.auto_flushing=false
    DoSomeThing
    assert_equal 2, ActiveRecord::Base.logger.buffer.size
    assert ActiveRecord::Base.logger.buffer[0] =~ /SELECT id FROM `T1` WHERE .* ORDER BY id DESC LIMIT .*/
    assert ActiveRecord::Base.logger.buffer[1] =~ /SELECT id FROM `T2` WHERE .* ORDER BY id DESC LIMIT .*/   
  end

ActiveRecord::Base.logger.flush flushes the existing entries in the buffer, and setting ActiveRecord::Base.logger.auto_flushing=false makes sure all the new entries will be kept in the buffer.

No comments:

Post a Comment