June 30th, 2006

I have finally had the time to really get into testing and wow is it cool. You know that feeling you get every now and then (speaking to those who don’t test)? That feeling of, “what if my code is not working?” That feeling of what did I screw up when I made that tiny change. Well, testing removes that feeling and replaces it with a smile. Anytime I start to feel that doubt creep in, I run another test and click my heels. At any rate, I’ll get back on track as to why I’m writing this post.

I know assert_difference is probably old news to most but tonight it blew me away. So here is one of my old nasty tests …

def test_should_destroy_subscriptions
  f = feeds(:addictedtonew)
  subs_count = Subscriptions.find(:all).size
  deleted_subs = f.subscriptions.size
  assert Feed.destroy(f.id)
  assert_equal subs_count - deleted_subs, Subscriptions.find(:all).size
end

Basically, I get a feed, get the total number of subscriptions, delete the feed, which in turn deletes all the subscriptions to the feed, and finally check if the number of subscriptions minus the number deleted matches the number in the table. Sure it works, but it was starting to get annoying real quick having each of my tests store the total value and then test that old value plus or minus the change against the current value.

I started looking in some sample apps I had downloaded from Railsday and noticed assert_difference. Duh…I knew immediately this was exactly what I wanted. I rewrote the test to look like this …

def test_should_destroy_subscriptions
  f = feeds(:addictedtonew)
  assert_difference Subscription, :count, -f.subscriptions.size do
    assert Feed.destroy(f.id)
  end
end

This test does the exact same thing as the previous, but is more readable and less lines of code. Basically, it asserts that there is a difference of the number of f’s subscriptions in the count of all the subscriptions before and after the yielded block. Here’s to happier testing for those who haven’t discovered this jewel yet like me!

Posted by jnunemaker in Testing

Sorry, comments are closed for this article to ease the burden of pruning spam. If you have any further comments, just send me an email.

About

Rails Tips is run by John Nunemaker, a web developer/programmer who has fallen deeply in love with Ruby.

Syndication

RailsTips Articles - An assortment of news and howto's related to ruby and rails.

Rails Quick Tips - These are cool Rails related links that I find. Typically, less than 5 a day.

Search