1)Respect object limits: When testing an object, try not to test any other objects, even if they're related. Narrow the scope of the test to be as small and self-contained as possible.
2)Don't test "how," test "what": We want to test what a method returns, not how it returns it. The internal implementation of a method is subjective, and while we believe in idioms and programming style, it is not the test's job to assess those things - only to assess what the code returns.
3)Write DRY tests: Wherever possible, avoid repetition in tests, just like production code.
4)Test early and often: Tests function as our safety net, but they can't help us if we don't use them. At a minimum, we'll want to run our specs before each commit. Running tests before each commit will allow us to reduce bugs proactively before we add them to the codebase.