When unit testing real-world code, there are many situations that make tests hard to write. How do you check if a function was called? How do you test an Ajax call? Or code using
setTimeout? That’s when you use test doubles — replacement code that makes hard to test things easy to test.
... read the whole story at www.sitepoint.com.