e.g.
It's easy to think that fail() is similar to stop() or abort(), because that's how it behaves when you run it interactively in the console. But it can't work this way in tests because tests need to keep running even after failure so that they can report all the failures at once. So in a real testing setup, fail() and pass() work very similarly: they both signal a condition that testhat records and then reports to the user.