Windowed String Comparison for RSpec

July 16, 2010 Alex Chaffee

When two strings fail to match, if the difference is somewhere in the middle of the strings, it can be annoying/impossible to track down the
actual difference. I’ve written a little Comparison object that
overrides the failure message for .should == like this:

Strings differ at position 12:
expected: ..."efghijklmnopqrst"...
  actual: ..."efghijklXXopqrst"...

It shows a “prelude” of a few characters, then the difference, lined up on successive lines so they’re easy to visually scan. It also does the right thing (or tries to) if the difference is near the beginning or end of the string (i.e. does or doesn’t show ellipses).

http://gist.github.com/474363

For people who can’t wait for this to get incorporated into RSpec
proper, you can grab the code from github and require "comparison" in your spec_helper.rb and it’ll override the existing RSpec == matcher. Or wait for Issue 9 to be pulled into version 2.1 (maybe). Or if you want to use it in your favorite testing framework, the object is completely self-contained and should be easy to call from your own assert_equals or whatever.

One open question is whether the exception message should show the
full actual string as well as the comparison… On one hand, it adds
to screen clutter, but on the other hand, it can be important in
tracking down the problem, especially if the prelude is ambiguous.

About the Author

Biography

More Content by Alex Chaffee
Previous
iPhone UI Automation tests with Jasmine
iPhone UI Automation tests with Jasmine

Since the language of the new iPhone UI Automation component is JavaScript I figured the easiest way to org...

Next
New Tech Talk: Managing Application Ecosystems
New Tech Talk: Managing Application Ecosystems

Daniel Lieberman of BitPusher says that ten years from now, much of what we think of as "operations" will b...

Enter curious. Exit smarter.

Register Now