Spies don't check anything, so certainly by default, they can't create additional unexpected assertions.
When I use a mock (JMock mode), then I get feedback about my design. If I write a test that needs to call foo() and bar(), but doesn't want to check calling foo(), then why is foo() on the interface I'm talking to? Sometimes the answer is just to stub foo() (instead of checking the expectation) this one time and sometimes the answer is the separate foo() and bar().
This is not at all question of spy versus mock. If I stub every method on a mock, it becomes a spy. If I check every method call on a spy, it becomes a mock. Let's everyone stop arguing this point, please.
I like JMock mode (expectations by default) when I want to maximise feedback about my design, which usually happens when I test-drive new behavior. I like Mockito mode (stubs by default) when I already know that the design is terrible and I just want to add some tests right now, which usually happens when I work with legacy code. Simple.