When tests fail it’s nice to know why. The more precise a failure message is and the less time required to investigate why the test failed, the better.
When trying to find out what broke the test, this…
Failure/Error: search_field.should_not be_visible expected visible? to return false, got true
…is infinitely preferable to this…
Failure/Error: search_field.visible?.should == false expected: false got: true (using ==)
The first failure tells you that the test expected the search field to be invisible, the second that it expected
true to equal
false – not very helpful. I’d rather have the first error message than the second, and unless you’re a masochist you probably would like the same (though having reviewed a lot of test code, I’m not so sure…).
Cucumber and rspec make “precision failure” easy through the use of matchers. Instead of checking whether “.visible?” returns true or false, you can use rspec matchers to write the following code:
search_field.should_not be_visible ...or... search_field.should be_visible
…instead of this:
search_field.visible?.should == false ...or... search_field.visible?.should == true
Your test code will be more understandable, and when tests fail you’ll have a high chance of knowing exactly what went wrong.
So, go and learn about RSpec Matchers!