rspec 3 upgrade: conversion of should to expect
August 10, 2014
update: follow the rspec upgrade guide and try the transpec gem
Upgrading a Rails app to RSpec 3, I appreciated Jake Boxer’s guide. However, his regular expressions didn’t work in the editors I use, so I whipped up some command-line options that use the flexible unix utility sed.
If you want to actually understand the following scripts, I recommend Bruce Barnett’s sed tutorial and remember xargs is your friend.
Also, there are a few differences with sed on OSX, so these may not work on other platforms.
I didn’t attempt to handle multi-lined expressions, so I searched my spec directory for “lambda” in advance and changed those manually, and, of course, found a few other exceptions by running my tests afterwards.
Change “should ==” to “should eq”
You’ll need to change other operators also, but this was a pattern that happened to be very common in my code.
find . -type f -print0 | xargs -0 sed -i "" -E "s/^([[:space:]]+)(.*)\.should ==[:space]*(.*)[:space]*$/\1\2.should eq(\3)/g"
Change “whatever.should” to “expect(whatever).to”
This also works for should_not, since it is okay to say .to_not, even though I usually see people wrote .not_to
find . -type f -print0 | xargs -0 sed -i "" -E "s/^([[:space:]]+)(.*)\.should/\1expect(\2).to/g"
Also, check out: Cyrus Stoller’s upgrade tips